PostgreSQL에서 읽기 전용 사용자를 어떻게 생성합니까?
Postgre에 사용자를 만들고 싶습니다.특정 데이터베이스의 SELECT만 수행할 수 있는 SQL.MySQL에서 명령은 다음과 같습니다.
GRANT SELECT ON mydb.* TO 'xxx'@'%' IDENTIFIED BY 'yyy';
PostgreSQL에 해당하는 명령 또는 일련의 명령은 무엇입니까?
난 노력했어요...
postgres=# CREATE ROLE xxx LOGIN PASSWORD 'yyy';
postgres=# GRANT SELECT ON DATABASE mydb TO xxx;
그러나 데이터베이스에 대해 허용할 수 있는 것은 CREATE, CONNECT, TEMPORY 및 TEMPORY뿐인 것 같습니다.
단일 테이블에 사용량 허용/선택
데이터베이스에만 CONNECT를 부여하는 경우 사용자는 연결할 수 있지만 다른 권한은 없습니다.네임스페이스(스키마)에 대한 사용 권한을 부여하고 테이블 및 보기에 대한 사용 권한을 개별적으로 부여해야 합니다.
GRANT CONNECT ON DATABASE mydb TO xxx;
-- This assumes you're actually connected to mydb..
GRANT USAGE ON SCHEMA public TO xxx;
GRANT SELECT ON mytable TO xxx;
다중 테이블/뷰(Postgre)SQL 9.0+)
Postgre의 최신 버전에서SQL, 단일 명령을 사용하여 스키마의 모든 테이블/뷰/등에 대한 사용 권한을 부여할 수 있습니다.
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;
이것은 이미 작성된 테이블에만 영향을 미칩니다.더 강력하게는 나중에 새 개체에 기본 역할을 자동으로 할당할 수 있습니다.
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO xxx;
기본적으로 이 명령은 이 명령을 실행한 사용자가 만든 개체(테이블)에만 영향을 줍니다. 그러나 이 명령은 실행 중인 사용자가 속한 역할에도 설정할 수 있습니다.그러나 새 개체를 만들 때 구성원인 모든 역할에 대해 기본 권한을 선택하지는 않습니다.그래서 아직도 주변에 약간의 소동이 있습니다.데이터베이스에 소유 역할이 있고 스키마 변경이 해당 소유 역할로 수행되는 접근 방식을 채택한 경우에는 해당 소유 역할에 기본 권한을 할당해야 합니다.IMHO 이 모든 것은 약간 혼란스러우며 기능 워크플로우를 생각해 내기 위해 실험이 필요할 수도 있습니다.
다중 테이블/뷰(Postgre)SQL 9.0 이전 버전)
다중 변경에서 가 발생하지 다음과 '한 '자동'을.GRANT SELECT
에: 이름/뷰
SELECT 'GRANT SELECT ON ' || relname || ' TO xxx;'
FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname = 'public' AND relkind IN ('r', 'v', 'S');
복사-n-붙여넣기 사랑을 위해 공개된 모든 테이블, 보기 및 시퀀스에서 관련 GRANT 명령을 GRANT SELECT로 출력해야 합니다.당연히, 이것은 이미 작성된 테이블에만 적용됩니다.
읽기 전용 사용자 생성 스크립트:
CREATE ROLE Read_Only_User WITH LOGIN PASSWORD 'Test1234'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
\connect YourDatabaseName;
이 읽기 전용 사용자에게 권한 할당:
GRANT CONNECT ON DATABASE YourDatabaseName TO Read_Only_User;
GRANT USAGE ON SCHEMA public TO Read_Only_User;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
나중에 새로 생성된 모든 테이블을 읽을 수 있는 권한 할당
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO Read_Only_User;
Postgre에서SQL v14에서는 미리 정의된 역할을 부여하기만 하면 됩니다.
GRANT pg_read_all_data TO xxx;
Postgre에 유의하십시오.SQL 9.0(현재 베타 테스트 중)에서는 다음과 같은 간단한 방법을 사용할 수 있습니다.
test=> GRANT SELECT ON ALL TABLES IN SCHEMA public TO joeuser;
다음은 읽기 전용 사용자를 추가하는 가장 좋은 방법입니다(Postgre 사용).SQL 9.0 이상):
$ sudo -upostgres psql postgres
postgres=# CREATE ROLE readonly WITH LOGIN ENCRYPTED PASSWORD '<USE_A_NICE_STRONG_PASSWORD_PLEASE';
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
그런 다음 모든 관련 컴퓨터(마스터 + 읽기-슬레이브/핫-대기 등)에 로그인하고 다음을 실행합니다.
$ echo "hostssl <PUT_DBNAME_HERE> <PUT_READONLY_USERNAME_HERE> 0.0.0.0/0 md5" | sudo tee -a /etc/postgresql/9.2/main/pg_hba.conf
$ sudo service postgresql reload
기본적으로 새 사용자에게는 테이블을 만들 수 있는 권한이 있습니다.읽기 전용 사용자를 만들려는 경우에는 원하는 사용자가 아닐 수 있습니다.
Postgre를 사용하여 실제 읽기 전용 사용자를 생성하려면 다음과 같이 하십시오.SQL 9.0+에서 다음 단계를 실행합니다.
# This will prevent default users from creating tables
REVOKE CREATE ON SCHEMA public FROM public;
# If you want to grant a write user permission to create tables
# note that superusers will always be able to create tables anyway
GRANT CREATE ON SCHEMA public to writeuser;
# Now create the read-only user
CREATE ROLE readonlyuser WITH LOGIN ENCRYPTED PASSWORD 'strongpassword';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyuser;
테이블을 수 있는 이 없는: 읽전용사용에게예테나을없수는권한경이우있는할열자이기블예:▁if▁(없는경:\d
하지 않음), 아마도 당신에게 입니다.USAGE
스키마에 대한 사용 권한. USAGE
는 사용자에게 할당된 권한을 실제로 사용할 수 있는 권한입니다.이게 무슨 의미가 있습니까?잘 모르겠어요.수정 방법:
# You can either grant USAGE to everyone
GRANT USAGE ON SCHEMA public TO public;
# Or grant it just to your read only user
GRANT USAGE ON SCHEMA public TO readonlyuser;
pg_grant_read_to_db.sh라는 편리한 스크립트를 만들었습니다.이 스크립트는 데이터베이스 스키마의 모든 테이블, 보기 및 시퀀스에 대해 지정된 역할에 읽기 전용 권한을 부여하고 기본값으로 설정합니다.
저는 모든 가능한 해결책을 읽었는데, 만약 당신이 그것들을 승인하기 전에 데이터베이스에 연결하는 것을 기억한다면 모두 괜찮습니다;) 어쨌든 다른 모든 해결책들 덕분입니다!!!
user@server:~$ sudo su - postgres
psql 사용자 생성:
postgres@server:~$ createuser --interactive
Enter name of role to add: readonly
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
psql cli를 시작하고 생성된 사용자의 암호를 설정합니다.
postgres@server:~$ psql
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1), server 9.5.14)
Type "help" for help.
postgres=# alter user readonly with password 'readonly';
ALTER ROLE
대상 데이터베이스에 연결:
postgres=# \c target_database
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1), server 9.5.14)
You are now connected to database "target_database" as user "postgres".
필요한 모든 권한 부여:
target_database=# GRANT CONNECT ON DATABASE target_database TO readonly;
GRANT
target_database=# GRANT USAGE ON SCHEMA public TO readonly ;
GRANT
target_database=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly ;
GRANT
대상 db public shema에 대한 기본 권한 변경:
target_database=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
ALTER DEFAULT PRIVILEGES
의 데이터베이스가 스키마에 .readonlyuser
)
db=> GRANT SELECT ON ALL TABLES IN SCHEMA public to readonlyuser;
GRANT
db=> GRANT CONNECT ON DATABASE mydatabase to readonlyuser;
GRANT
db=> GRANT SELECT ON ALL SEQUENCES IN SCHEMA public to readonlyuser;
GRANT
가 데터베사중경우를 customschema
위의 명령을 실행하지만 명령을 하나 더 추가합니다.
db=> ALTER USER readonlyuser SET search_path=customschema, public;
ALTER ROLE
간단한 방법은 데이터베이스의 각 테이블에 대해 선택 권한을 부여하는 것입니다.
postgres=# grant select on db_name.table_name to read_only_user;
데이터베이스 메타데이터에서 허가문을 생성하여 이를 자동화할 수 있습니다.
despesz' 링크에 대한 응답으로 게시된 링크에서 가져옵니다.
Postgres 9.x에는 요청된 작업을 수행할 수 있는 기능이 있습니다.다음의 Grant On Database Objects 단락을 참조하십시오.
http://www.postgresql.org/docs/current/interactive/sql-grant.html
여기서 "하나 이상의 스키마 내에서 동일한 유형의 모든 개체에 대한 권한을 부여하는 옵션도 있습니다.이 기능은 현재 테이블, 시퀀스 및 함수에 대해서만 지원됩니다(그러나 모든 테이블은 뷰 및 외부 테이블을 포함하는 것으로 간주됨)."
이 페이지에서는 역할 및 "모든 권한"이라는 권한의 사용에 대해서도 설명합니다.
또한 GRANT 기능을 SQL 표준과 비교하는 방법에 대한 정보도 제공합니다.
CREATE USER username SUPERUSER password 'userpass';
ALTER USER username set default_transaction_read_only = on;
언급URL : https://stackoverflow.com/questions/760210/how-do-you-create-a-read-only-user-in-postgresql
'programing' 카테고리의 다른 글
Azure Storage Client 2.0의 다른 BLOB로 한 Azure Blob 복사 (0) | 2023.05.26 |
---|---|
IIS 7.0에서 "HTTP 오류 500.19 - 내부 서버 오류"를 해결하는 방법 (0) | 2023.05.26 |
postgresql 세션/연결 종료 (0) | 2023.05.26 |
Node.js? any CURL 내부에서 원격 REST 호출을 하는 방법은 무엇입니까? (0) | 2023.05.26 |
UIViewController의 보기가 표시되는지 확인하는 방법 (0) | 2023.05.26 |