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