반응형
Postgres의 테이블에 대한 쿼리 부여
postgres의 객체에 부여 된 모든 GRANTS를 어떻게 쿼리 할 수 있습니까?
예를 들어 "mytable"테이블이 있습니다.
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
나에게주는 것이 필요합니다.
user1: SELECT, INSERT
user2: UPDATE
\z mytable
from psql은 테이블의 모든 권한을 제공하지만 개별 사용자별로 분할해야합니다.
이미 찾았습니다.
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
사용자 당 한 줄을 원하는 경우 피부 여자별로 그룹화 할 수 있습니다 (string_agg에 PG9 + 필요).
SELECT grantee, string_agg(privilege_type, ', ') AS privileges
FROM information_schema.role_table_grants
WHERE table_name='mytable'
GROUP BY grantee;
다음과 같은 출력이 표시됩니다.
grantee | privileges
---------+----------------
user1 | INSERT, SELECT
user2 | UPDATE
(2 rows)
아래 쿼리를 시도하십시오. 테이블에 대한 모든 사용자 및 해당 권한 목록을 제공합니다.
select a.tablename,b.usename,HAS_TABLE_PRIVILEGE(usename,tablename, 'select') as select,
HAS_TABLE_PRIVILEGE(usename,tablename, 'insert') as insert,
HAS_TABLE_PRIVILEGE(usename,tablename, 'update') as update,
HAS_TABLE_PRIVILEGE(usename,tablename, 'delete') as delete,
HAS_TABLE_PRIVILEGE(usename,tablename, 'references') as references from pg_tables a , pg_user b
where a.tablename='your_table_name';
이 쿼리는 모든 데이터베이스 및 스키마의 모든 테이블을 나열합니다 ( WHERE
특정 데이터베이스, 스키마 또는 테이블을 필터링하기 위해 절 에서 줄의 주석 처리 제거 ). 특정 권한이 부여되었는지 여부 :
SELECT grantee
,table_catalog
,table_schema
,table_name
,string_agg(privilege_type, ', ' ORDER BY privilege_type) AS privileges
FROM information_schema.role_table_grants
WHERE grantee != 'postgres'
-- and table_catalog = 'somedatabase' /* uncomment line to filter database */
-- and table_schema = 'someschema' /* uncomment line to filter schema */
-- and table_name = 'sometable' /* uncomment line to filter table */
GROUP BY 1, 2, 3, 4;
샘플 출력 :
grantee |table_catalog |table_schema |table_name |privileges |
--------|----------------|--------------|---------------|---------------|
PUBLIC |adventure_works |pg_catalog |pg_sequence |SELECT |
PUBLIC |adventure_works |pg_catalog |pg_sequences |SELECT |
PUBLIC |adventure_works |pg_catalog |pg_settings |SELECT, UPDATE |
...
@shruti의 답변에 추가
To query grants for all tables in a schema for a given user
select a.tablename,
b.usename,
HAS_TABLE_PRIVILEGE(usename,tablename, 'select') as select,
HAS_TABLE_PRIVILEGE(usename,tablename, 'insert') as insert,
HAS_TABLE_PRIVILEGE(usename,tablename, 'update') as update,
HAS_TABLE_PRIVILEGE(usename,tablename, 'delete') as delete,
HAS_TABLE_PRIVILEGE(usename,tablename, 'references') as references
from pg_tables a,
pg_user b
where schemaname='your_schema_name'
and b.usename='your_user_name'
order by tablename;
Here is a script which generates grant queries for a particular table. It omits owner's privileges.
SELECT
format (
'GRANT %s ON TABLE %I.%I TO %I%s;',
string_agg(tg.privilege_type, ', '),
tg.table_schema,
tg.table_name,
tg.grantee,
CASE
WHEN tg.is_grantable = 'YES'
THEN ' WITH GRANT OPTION'
ELSE ''
END
)
FROM information_schema.role_table_grants tg
JOIN pg_tables t ON t.schemaname = tg.table_schema AND t.tablename = tg.table_name
WHERE
tg.table_schema = 'myschema' AND
tg.table_name='mytable' AND
t.tableowner <> tg.grantee
GROUP BY tg.table_schema, tg.table_name, tg.grantee, tg.is_grantable;
참고URL : https://stackoverflow.com/questions/7336413/query-grants-for-a-table-in-postgres
반응형
'Development Tip' 카테고리의 다른 글
파일 및 폴더를 포함하여 커밋되지 않은 변경 사항을 되 돌리는 방법은 무엇입니까? (0) | 2020.09.27 |
---|---|
파일 또는 어셈블리 System.Net.Http, 버전 = 4.0.0.0을 ASP.NET (MVC 4) 웹 API OData 프리 릴리즈와 함께로드 할 수 없습니다. (0) | 2020.09.25 |
전체 범위에서 균일하게 난수 생성 (0) | 2020.09.25 |
NumPy를 사용하여 이동 평균을 계산하는 방법은 무엇입니까? (0) | 2020.09.25 |
16 진수 RGB 문자열에서 System.Drawing.Color를 만드는 방법은 무엇입니까? (0) | 2020.09.25 |