、、、および(無実を保護するために名前が変更された)のmygs_user
3つのデータベースに mydatamodel
共通のユーザーがあります。mygs
Newdatabase
私は最初の2つのデータベースを「継承」し、3番目のデータベース(Newdatabase
)を作成しました。そのセキュリティは、同じユーザー名とロールを使用するなど、元の2つのデータベースを厳密に複製する必要があります。
問題は、2つの元のデータベースに明示的な特権がない場合でも、共通ユーザーでmygs_user
あるがそれらに問題なくアクセスできることです。3番目の(Newdatabase
)は、一般ユーザーをスーパーユーザーに変更しない限りアクセスを許可しません。これは明らかにベストプラクティスではありません。
もちろん、NewDBのセキュリティ設定をサイコロのない元の設定に設定してみました。
2つの元のデータベースは次のとおりです。
mydatamodel
CREATE DATABASE mydatamodel
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = datamodel_tablespace
LC_COLLATE = 'English, United States'
LC_CTYPE = 'English, United States'
CONNECTION LIMIT = -1;
mygs
CREATE DATABASE mygs
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = mygs_tablespace
LC_COLLATE = 'English, United States'
LC_CTYPE = 'English, United States'
CONNECTION LIMIT = -1;
...そしてここに新しいデータベースがあります:
CREATE DATABASE "NewDatabase"
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'English, United States'
LC_CTYPE = 'English, United States'
CONNECTION LIMIT = -1;
GRANT CONNECT, TEMPORARY ON DATABASE "NewDatabase" TO public;
GRANT ALL ON DATABASE "NewDatabase" TO postgres;
GRANT ALL ON DATABASE "NewDatabase" TO mygs_user;
元の2つは別々のテーブルスペースを占有しますが、新しいテーブルスペースは占有しません。
CREATE TABLESPACE mygs_tablespace
OWNER postgres
LOCATION 'c:/MYGS_Database/PostgreSQL';
CREATE TABLESPACE datamodel_tablespace
OWNER postgres
LOCATION 'c:/MYGS_Database/MyDataModel';
これは一般的なユーザーです:
CREATE ROLE mygs_user LOGIN
SUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;
GRANT "MYGS" TO mygs_user;
...そして共通の役割:
CREATE ROLE "MYGS"
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;
pg_hba.confファイルの内容は次のとおりです。
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 md5
スーパーユーザー権限を付与せずに、3番目のデータベースの共通ユーザーへのアクセスを許可するにはどうすればよいですか?