젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : 보안 범퍼카 토토 행 | 토토 베이 : 문서 : 9.6 : 데이터 정의 | 5 장 데이터 정의 | 스포츠 토토 베트맨 PostgreSQL : 문서 : 9.6 : 상속 |
aPostgreSQL데이터베이스 클러스터에는 하나 이상의 명명 된 데이터베이스가 포함되어 있습니다. 역할과 몇 가지 다른 객체 유형은 전체 클러스터에서 공유됩니다. 서버에 대한 클라이언트 연결은 단일 데이터베이스에서 데이터에만 액세스 할 수 있으며 연결 요청에 지정된 것입니다.
참고 :클러스터 사용자가 반드시 클러스터의 모든 데이터베이스에 액세스 할 수있는 권한이있는 것은 아닙니다. 역할 이름을 공유한다는 것은 다른 역할이 없음을 의미합니다.Joe동일한 클러스터의 두 데이터베이스에서; 그러나 시스템은 허용하도록 구성 될 수 있습니다Joe일부 데이터베이스에만 액세스하십시오.
데이터베이스에는 하나 이상의 이름이 포함되어 있습니다토토 꽁 머니,이 테이블이 포함되어 있습니다. Schemas에는 데이터 유형, 기능 및 연산자를 포함하여 다른 종류의 명명 된 객체도 포함되어 있습니다. 동일한 개체 이름은 충돌없이 다른 토토 꽁 머니에서 사용할 수 있습니다. 예를 들어, 둘 다Schema1및myschema이름이 지정된 테이블을 포함 할 수 있습니다mytable. 데이터베이스와 달리 Schemas는 엄격하게 분리되지 않습니다. 사용자는 연결된 데이터베이스의 토토 꽁 머니에서 객체에 액세스 할 수 있습니다..
토토 꽁 머니를 사용하려는 몇 가지 이유가 있습니다 :
많은 사용자가 서로 방해하지 않고 하나의 데이터베이스를 사용할 수 있도록합니다.
데이터베이스 개체를 논리 그룹으로 구성하여 더 관리하기 쉽게 만들기 위해.
타사 응용 프로그램은 다른 개체의 이름과 충돌하지 않도록 별도의 토토 꽁 머니에 넣을 수 있습니다.
토토 꽁 머니는 토토 꽁 머니를 중첩 할 수없는 경우를 제외하고 운영 체제 수준의 디렉토리와 유사합니다.
토토 꽁 머니를 만들려면를 사용하십시오.토토 꽁 머니 만들기명령. 토토 꽁 머니에 선택한 이름을 부여하십시오. 예를 들어:
토토 꽁 머니 생성 myschema;
토토 꽁 머니에서 개체를 작성하거나 액세스하려면 a 쓰기적격 이름토토 꽁 머니 이름과 테이블 이름으로 구성되어 있습니다.
토토 꽁 머니.테이블
이것은 테이블 수정 명령 및 다음 장에서 논의 된 데이터 액세스 명령을 포함하여 테이블 이름이 예상되는 곳에서 발생합니다. (Brevity를 위해 우리는 테이블에 대해서만 말할 것이지만, 같은 아이디어는 유형 및 기능과 같은 다른 종류의 명명 된 객체에 적용됩니다.)
실제로 더 일반적인 구문
데이터베이스.토토 꽁 머니.테이블
도 사용할 수 있지만 현재는입니다.프로 포르마SQL 표준 준수. 데이터베이스 이름을 작성하는 경우 연결된 데이터베이스와 동일해야합니다.
새 토토 꽁 머니에서 테이블을 만들려면 다음을 사용합니다.
테이블 작성 myschema.mytable ( ... );
비어있는 경우 토토 꽁 머니를 삭제하려면 (모든 개체가 삭제되었습니다) 사용 :
토토 꽁 머니 drop schema myschema;
포함 된 모든 객체를 포함하여 토토 꽁 머니를 삭제하려면 사용 :
토토 꽁 머니 DROP SCHEMA MYSCHEMA CASCADE;
참조토토 사이트 추천 : 문서 : 9.6 : 종속성 추적이 뒤에있는 일반적인 메커니즘에 대한 설명.
종종 다른 사람이 소유 한 토토 꽁 머니를 만들고 싶을 것입니다 (이것은 사용자의 활동을 잘 정의 된 네임 스페이스로 제한하는 방법 중 하나이므로). 그것의 구문은 다음과 같습니다.
토토 꽁 머니 생성Schema_Name승인user_name;
토토 꽁 머니 이름을 생략 할 수도 있습니다.이 경우 토토 꽁 머니 이름은 사용자 이름과 동일합니다. 보다섹션 5.8.6이것이 유용 할 수있는 방법.
토토 꽁 머니 이름으로 시작하는PG_시스템 목적으로 예약되어 있으며 사용자가 생성 할 수 없습니다.
이전 섹션에서는 토토 꽁 머니 이름을 지정하지 않고 테이블을 만들었습니다. 기본적으로 이러한 테이블 (및 기타 개체)은이라는 토토 꽁 머니에 자동으로 표시됩니다."public". 모든 새로운 데이터베이스에는 이러한 토토 꽁 머니가 포함되어 있습니다. 따라서 다음은 동일합니다.
테이블 제품 생성 (...);
및 :
테이블 공개 생성 공개 제품 (...);
자격을 갖춘 이름은 쓰기가 지루하며, 어쨌든 특정 토토 꽁 머니 이름을 응용 프로그램으로 연결하지 않는 것이 가장 좋습니다. 따라서 테이블은 종종에 의해 언급됩니다.자격이없는 이름는 테이블 이름으로 구성됩니다. 시스템은 a를 따르는 것이 어떤 테이블을 의미하는지 결정합니다.검색 경로, 이는 검색 경로의 첫 번째 일치 테이블이 원하는 것으로 간주됩니다. 검색 경로에 일치하지 않으면 데이터베이스의 다른 토토 꽁 머니에 테이블 이름이 일치하는 경우에도 오류 가보고됩니다.
다른 Schemas에서 이름처럼 이름이 지정된 객체를 만들 수있는 기능은 매번 동일한 개체를 정확하게 참조하는 쿼리를 작성합니다. 또한 사용자가 악의적으로 또는 우연히 다른 사용자의 쿼리의 동작을 변경할 수있는 잠재력을 열어줍니다. 쿼리에서 자격이없는 이름의 유병률과 그에 대한 사용으로 인해postgresql내부, 토토 꽁 머니 추가search_path모든 사용자를 효과적으로 신뢰하는생성해당 토토 꽁 머니의 권한. 일반 쿼리를 실행하면 검색 경로 토토 꽁 머니에서 객체를 생성 할 수있는 악의적 인 사용자가 제어하고 임의의 SQL 기능을 실행 한 것처럼 실행할 수 있습니다..
검색 경로에 명명 된 첫 번째 토토 꽁 머니를 현재 토토 꽁 머니라고합니다. 첫 번째 토토 꽁 머니 검색 외에도이면 새 테이블이 생성되는 토토 꽁 머니이기도합니다.테이블 만들기명령은 토토 꽁 머니 이름을 지정하지 않습니다.
현재 검색 경로를 표시하려면 다음 명령을 사용하십시오.
show search_path;
기본 설정 에서이 반환이 반환됩니다 :
search_path -------------- "$ user", public
첫 번째 요소는 현재 사용자와 동일한 이름을 가진 토토 꽁 머니를 검색 할 것을 지정합니다. 그러한 토토 꽁 머니가 존재하지 않으면 항목이 무시됩니다. 두 번째 요소는 우리가 이미 본 공개 토토 꽁 머니를 말합니다.
존재하는 검색 경로의 첫 번째 토토 꽁 머니는 새 개체를 만드는 기본 위치입니다. 그렇기 때문에 기본적으로 객체가 공개 토토 꽁 머니에서 생성되는 이유입니다. 토토 꽁 머니 자격이없는 다른 컨텍스트에서 객체가 참조되면 (테이블 수정, 데이터 수정 또는 쿼리 명령) 일치하는 객체가 발견 될 때까지 검색 경로가 통과됩니다. 따라서 기본 구성에서 자격이없는 액세스는 다시 공개 토토 꽁 머니 만 참조 할 수 있습니다.
새로운 토토 꽁 머니를 경로에 넣으려면 다음을 사용합니다.
Search_Path를 Myschema, Public;에 설정하십시오.
(우리는 생략$ user여기에 즉각적인 필요가 없기 때문에 여기에 있습니다.) 그런 다음 토토 꽁 머니 자격없이 테이블에 액세스 할 수 있습니다.
드롭 테이블 mytable;
이후myschema경로의 첫 번째 요소이며, 새로운 객체가 기본적으로 생성 될 것입니다.
우리는 또한 다음과 같이 썼을 수도 있습니다 :
search_path를 myschema로 설정하십시오;
그러면 더 이상 명시 적 자격없이 공개 토토 꽁 머니에 액세스 할 수 없습니다. 기본적으로 존재한다는 것을 제외하고는 공개 토토 꽁 머니에 대해 특별한 것이 없습니다. 도착할 수 있습니다.
참조스포츠 토토 베트맨 PostgreSQL : 문서 : 9.6 : 시스템 정보 기능토토 꽁 머니 검색 경로를 조작하는 다른 방법.
검색 경로는 테이블 이름과 마찬가지로 데이터 유형 이름, 기능 이름 및 연산자 이름과 동일한 방식으로 작동합니다. 데이터 유형 및 기능 이름은 테이블 이름과 정확히 동일한 방식으로 자격을 얻을 수 있습니다. 표현식에 자격을 갖춘 운영자 이름을 작성 해야하는 경우 특별 조항이 있습니다. 작성해야합니다
Operator (토토 꽁 머니.운영자)
이것은 구문 모호성을 피하기 위해 필요합니다. 예는 다음과 같습니다.
선택 3 연산자 (PG_CATALOG.+) 4;
실제로는 일반적으로 운영자의 검색 경로에 의존하여 그처럼 못 생겼지 않아야합니다.
기본적으로 사용자는 소유하지 않은 토토 꽁 머니의 객체에 액세스 할 수 없습니다. 이를 허용하기 위해 토토 꽁 머니의 소유자는를 부여해야합니다.usage토토 꽁 머니의 권한. 사용자가 토토 꽁 머니에서 객체를 사용할 수 있도록 추가 권한을 객체에 적합하게 부여해야 할 수도 있습니다.
사용자는 다른 사람의 토토 꽁 머니에서 객체를 만들 수 있습니다. 그것을 허용하기 위해,Create토토 꽁 머니의 권한을 부여해야합니다. 기본적으로 모든 사람이Createandusage토토 꽁 머니의 권한public. 이를 통해 주어진 데이터베이스에 연결할 수있는 모든 사용자가 객체를 생성 할 수 있습니다.public토토 꽁 머니. 일부사용 패턴그 특권 취소를 요청하십시오 :
공개에서 토토 꽁 머니 대중에 대한 Revoke 만들기;
(첫 번째"public"토토 꽁 머니입니다. 두 번째는"public"평균"모든 사용자". 첫 번째 의미에서, 그것은 식별자이며, 두 번째 의미에서 그것은 핵심 단어이므로 다른 대문자입니다. 의 지침을 상기섹션 4.1.1.)
외에public및 사용자가 제작 한 토토 꽁 머니, 각 데이터베이스는 A를 포함합니다.PG_CATALOG시스템 테이블과 모든 내장 데이터 유형, 기능 및 운영자가 포함 된 토토 꽁 머니PG_CATALOG는 항상 검색 경로의 일부입니다. 경로에서 명시 적으로 명명되지 않은 경우 암시 적으로 검색됩니다전경로의 토토 꽁 머니 검색. 이렇게하면 내장 이름이 항상 찾을 수 있습니다. 그러나 명시 적으로 배치 할 수 있습니다PG_CATALOG검색 경로 끝에서 사용자 정의 이름이 내장 이름을 재정의하는 것을 선호하는 경우
시스템 테이블 이름이 시작되므로PG_, 미래 버전에서 테이블과 동일하게 이름이 지정된 시스템 테이블을 정의하면 충돌을 겪지 않도록 그러한 이름을 피하는 것이 가장 좋습니다. (기본 검색 경로를 사용하면 테이블 이름에 대한 자격이없는 참조가 대신 시스템 테이블로 해결됩니다.) 시스템 테이블은로 시작하는 컨벤션을 계속 따릅니다.PG_, 사용자가 사용자가 피하는 한 자격이없는 사용자 테이블 이름과 충돌하지 않도록PG_prefix.
토토 꽁 머니를 사용하여 여러 가지 방법으로 데이터를 구성 할 수 있습니다. 에이보안 토토 꽁 머니 사용 패턴신뢰할 수없는 사용자가 다른 사용자의 쿼리의 동작을 변경하지 못하게합니다. 데이터베이스가 보안 토토 꽁 머니 사용 패턴을 사용하지 않으면 데이터베이스가 각 세션 시작시 보호 조치를 취할 수있는 사용자는 안전하게 쿼리하려고합니다. 구체적으로, 그들은 각 세션을 설정하여 시작합니다search_path빈 문자열에 또는 다른 방식으로 비 슈퍼 라이저 작성된 토토 꽁 머니를 제거하십시오search_path. 기본 구성에서 쉽게 지원되는 몇 가지 사용 패턴이 있습니다.
일반 사용자를 사용자-민간 토토 꽁 머니로 제한합니다. 이것을 구현하려면 exsu공개에서 토토 꽁 머니 공개에 대한 Revoke Create, 해당 사용자와 동일한 이름을 가진 각 사용자에 대한 토토 꽁 머니를 만듭니다. 기본 검색 경로는로 시작한다는 것을 상기하십시오.$ user, 사용자 이름으로 해결됩니다. 따라서 각 사용자에게 별도의 토토 꽁 머니가있는 경우 기본적으로 자체 토토 꽁 머니에 액세스합니다. 신뢰할 수없는 사용자가 이미 로그인 한 데이터베이스 에서이 패턴을 채택한 후 토토 꽁 머니의 개체와 같은 객체에 대한 공개 토토 꽁 머니 감사를 고려하십시오PG_CATALOG. 이 패턴은 신뢰할 수없는 사용자가 데이터베이스 소유자이거나 보유하지 않는 한 보안 토토 꽁 머니 사용 패턴입니다.Createrole권한,이 경우 보안 토토 꽁 머니 사용 패턴이 존재하지 않습니다.
기본 검색 경로에서 공개 토토 꽁 머니를 제거하여 수정하여postgresql.conf또는 발행ALTER 역할 모든 SETOR SEARCH_PATH = "$ USER". 모든 사람은 공개 토토 꽁 머니에서 객체를 만들 수있는 기능을 유지하지만 자격을 갖춘 이름 만 해당 객체를 선택합니다. 자격을 갖춘 테이블 참조는 괜찮지 만 공개 토토 꽁 머니의 기능에 대한 호출PostgreSQL : 문서 : 9. 공개 토토 꽁 머니에서 함수 또는 확장을 만드는 경우 첫 번째 패턴을 대신 사용하십시오. 그렇지 않으면, 첫 번째 패턴과 마찬가지로, 신뢰할 수없는 사용자가 데이터베이스 소유자이거나 보유하지 않는 한 이것은 안전합니다.Createrole특권.
기본값을 유지하십시오. 모든 사용자는 공개 토토 꽁 머니에 암시 적으로 액세스합니다. 이것은 토토 꽁 머니를 전혀 사용할 수없는 상황을 시뮬레이션하여 비 토토 꽁 머니 인식 세계에서 원활한 전환을 제공합니다. 그러나 이것은 결코 안전한 패턴이 아닙니다. 데이터베이스에 단일 사용자 또는 상호 신뢰 사용자가 몇 명있는 경우에만 허용됩니다.
모든 패턴의 경우 공유 애플리케이션 (모든 사람이 사용할 테이블, 타사가 제공하는 추가 기능 등)을 설치하려면 별도의 토토 꽁 머니에 넣습니다. 다른 사용자가 액세스 할 수 있도록 적절한 권한을 부여해야합니다. 그런 다음 사용자는 토토 꽁 머니 이름으로 이름을 자격하여 이러한 추가 객체를 참조하거나 선택한대로 추가 토토 꽁 머니를 검색 경로에 넣을 수 있습니다..
SQL 표준에서는 다른 사용자가 소유 한 동일한 토토 꽁 머니의 객체 개념이 존재하지 않습니다. 또한 일부 구현은 소유자와 다른 이름을 가진 토토 꽁 머니를 만들 수 없습니다. 실제로, 토토 꽁 머니 및 사용자의 개념은 표준에 지정된 기본 토토 꽁 머니 지원만을 구현하는 데이터베이스 시스템에서 거의 동일합니다. 따라서 많은 사용자가 자격을 갖춘 이름을 실제로 구성한다고 생각합니다.user_name.table_name. 이것은 방법입니다PostgreSQL모든 사용자에 대해 사용자 당 토토 꽁 머니를 생성하면 효과적으로 행동합니다.
또한 a의 개념은 없습니다.publicSQL 표준의 토토 꽁 머니. 표준에 대한 최대의 순응을 위해서는를 사용해서는 안됩니다.public토토 꽁 머니.
물론 일부 SQL 데이터베이스 시스템은 Schemas를 전혀 구현하지 못하거나 (제한된) 교차-데이터베이스 액세스를 허용함으로써 네임 스페이스 지원을 제공 할 수 있습니다. 해당 시스템으로 작업 해야하는 경우 토토 꽁 머니를 전혀 사용하지 않음으로써 최대의 휴대 성을 달성합니다.