用户相关
查看用户对某些对象的权限
# 查看某个用户的系统权限:
SELECT * FROM pg_roles WHERE rolname='username';
# 查看某个用户对表的权限:
SELECT *
FROM information_schema.table_privileges
WHERE grantee='username';
# 查看某个用户对列的权限:
SELECT *
FROM information_schema.column_privileges
WHERE grantee='username';创建用户
create user 用户名 password '密码';删除用户
drop user 用户名;给用户设置密码
ALTER USER username PASSWORD 'new_password';
# 其中,`username` 是要更改密码的用户名,`new_password` 是新密码。
# 例如,要为用户 `myuser` 设置密码为 `mypassword`,可以执行以下命令:
ALTER USER myuser PASSWORD 'mypassword';请确保将实际的用户名和密码替换为你要设置的值。
权限操作
这些授权操作的时候,并没有指定数数据库的选项,经过实测,在那个数据库下执行命令,就是指定那个数据库下的表或者
schema,所以想要授予那个数据库的权限,需要先切换到相应的数据库,但是,revoke操作不需要切换,
赋予权限
对于数据库的权限操作
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]
create:对于数据库,允许在数据库中创建新的schema、table、index。
connect:允许用户连接到指定的数据库。在连接启动时检查此权限。
temporary,temp:允许在使用指定数据库时创建临时表。
all privileges:一次授予所有可用权限。
public:所有用户。CREATE: 允许在指定的数据库中创建新的对象,如表、视图、函数等。CONNECT: 允许连接到指定的数据库。TEMPORARY或TEMP: 允许在指定的数据库中创建临时对象。ALL [ PRIVILEGES ]: 授予所有权限,包括CREATE、CONNECT、TEMPORARY等。database_name: 要授予权限的数据库名称。role_specification: 指定要授予权限的角色(用户或组)。WITH GRANT OPTION: 允许被授权的角色将授予的权限再授予给其他角色。GRANTED BY role_specification: 指定授权的角色。只有指定的授权角色才能使用GRANT命令撤销授权。
示例用法:
授予一个角色对数据库的连接权限:
sqlGRANT CONNECT ON DATABASE mydb TO myrole;授予一个角色对数据库的创建表和连接权限,并允许该角色将授权再授予其他角色:
sqlGRANT CREATE, CONNECT ON DATABASE mydb TO myrole WITH GRANT OPTION;授予多个角色对多个数据库的所有权限:
sqlGRANT ALL PRIVILEGES ON DATABASE db1, db2 TO role1, role2;撤销角色对数据库的特定权限:
sqlREVOKE CREATE ON DATABASE mydb FROM myrole;
对于schema中表的权限操作
以下是对schema的操作权限设置的语法
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]CREATE: 允许在指定的模式中创建新的对象,例如表、视图、函数等。USAGE: 允许在指定的模式中使用对象,但不包括创建对象的权限。ALL [ PRIVILEGES ]: 授予所有权限,包括CREATE和USAGE。schema_name: 要授予权限的模式名称。role_specification: 指定要授予权限的角色(用户或组)。WITH GRANT OPTION: 允许被授权的角色将授予的权限再授予给其他角色。GRANTED BY role_specification: 指定授权的角色。只有指定的授权角色才能使用GRANT命令撤销授权。
以下是几个用法示例:
授予一个角色在特定模式中创建对象的权限:
sqlGRANT CREATE ON SCHEMA schema_name TO role_name;授予一个角色在特定模式中使用对象的权限,并允许该角色将授权再授予其他角色:
sqlGRANT USAGE ON SCHEMA schema_name TO role_name WITH GRANT OPTION;授予多个角色在多个模式中的所有权限:
sqlGRANT ALL PRIVILEGES ON SCHEMA schema1, schema2 TO role1, role2;撤销一个角色在特定模式中的特定权限:
sqlREVOKE CREATE ON SCHEMA schema_name FROM role_name;
对于表的权限操作
GRANT 命令用于授予表级别的权限。下面是 GRANT 命令的语法和参数解释:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]SELECT: 允许查询表中的数据。INSERT: 允许向表中插入新的行。UPDATE: 允许更新表中的行。DELETE: 允许删除表中的行。TRUNCATE: 允许截断(清空)表。REFERENCES: 允许在其他表中引用该表作为外键。TRIGGER: 允许在表上创建触发器。ALL [ PRIVILEGES ]: 授予所有权限,包括SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES和TRIGGER。
以下是两种常见的用法示例:
授予一个角色对特定表的查询和插入权限:
sqlGRANT SELECT, INSERT ON table_name TO role_name;授予一个角色对特定模式中所有表的所有权限,并允许该角色将授权再授予其他角色:
sqlGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO role_name WITH GRANT OPTION;
如果你希望授予或撤销多个权限,可以在 GRANT 或 REVOKE 语句中列出多个权限,以逗号分隔。类似地,你可以指定多个表名或模式名,通过逗号分隔。
#设置只读权限
alter user 用户名 set default_transaction_read_only = on;
#设置可操作的数据库
grant all on database 数据库名 to 用户名;
#设置可操作的模式和权限
grant [select,insert,update,delete] on [all tables] in schema [public] to 用户名;对列级别的权限操作
GRANT 命令还可以用于授予表级别的列权限。以下是 GRANT 命令的语法和参数解释:
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]SELECT: 允许查询表中特定列的数据。INSERT: 允许向表中特定列插入新的值。UPDATE: 允许更新表中特定列的值。REFERENCES: 允许将表中特定列作为外键引用。ALL [ PRIVILEGES ]: 授予所有权限,包括SELECT、INSERT、UPDATE、REFERENCES。column_name: 要授予权限的列名。table_name: 要授予权限的表名。role_specification: 指定要授予权限的角色(用户或组)。WITH GRANT OPTION: 允许被授权的角色将授予的权限再授予给其他角色。GRANTED BY role_specification: 指定授权的角色。只有指定的授权角色才能使用GRANT命令撤销授权。
以下是几个用法示例:
授予一个角色对表中特定列的查询权限:
sqlGRANT SELECT (column_name) ON table_name TO role_name;授予一个角色对表中特定列的查询和插入权限,并允许该角色将授权再授予其他角色:
sqlGRANT SELECT (column_name), INSERT (column_name) ON table_name TO role_name WITH GRANT OPTION;授予多个角色对多个表中特定列的更新和引用权限:
sqlGRANT UPDATE (column_name), REFERENCES (column_name) ON table1, table2 TO role1, role2;授予一个角色对表中所有列的所有权限:
sqlGRANT ALL PRIVILEGES (column_name) ON table_name TO role_name;
收回权限
表
以下是一个 PostgreSQL 的 REVOKE 语句的示例,用于撤销已授予的权限:
REVOKE SELECT, INSERT, UPDATE
ON my_table
FROM my_role;这个语句将从 my_role 角色中撤销对 my_table 表的 SELECT、INSERT 和 UPDATE 权限。
如果你想要撤销所有权限,可以使用 ALL PRIVILEGES 关键字:
REVOKE ALL PRIVILEGES
ON my_table
FROM my_role;这个语句将从 my_role 角色中撤销对 my_table 表的所有权限。
如果你想要撤销授予其他角色的权限,可以使用 GRANTED BY 子句:
REVOKE SELECT, INSERT, UPDATE
ON my_table
FROM my_role
GRANTED BY other_role;这个语句将从 other_role 角色中撤销对 my_table 表的 SELECT、INSERT 和 UPDATE 权限,并且只有当这些权限是由 other_role 授予给 my_role 时才会生效。
最后,如果你想要在撤销权限时同时删除依赖于该权限的对象,可以使用 CASCADE 选项。如果你只想要在没有依赖项的情况下才能撤销权限,则可以使用 RESTRICT 选项。例如:
REVOKE SELECT, INSERT, UPDATE
ON my_table
FROM my_role
CASCADE;这个语句将从 my_role 角色中撤销对 my_table 表的 SELECT、INSERT 和 UPDATE 权限,并且将删除依赖于这些权限的任何对象。
列级
以下是一个 PostgreSQL 的 REVOKE 语句的示例,用于撤销已授予的权限:
REVOKE SELECT (column_name)
ON my_table
FROM my_role;这个语句将从 my_role 角色中撤销对 my_table 表中 column_name 列的 SELECT 权限。
如果你想要撤销所有权限,可以使用 ALL PRIVILEGES 关键字:
REVOKE ALL PRIVILEGES (column_name)
ON my_table
FROM my_role;这个语句将从 my_role 角色中撤销对 my_table 表中 column_name 列的所有权限。
如果你想要撤销授予其他角色的权限,可以使用 GRANTED BY 子句:
REVOKE SELECT (column_name)
ON my_table
FROM my_role
GRANTED BY other_role;这个语句将从 other_role 角色中撤销对 my_table 表中 column_name 列的 SELECT 权限,并且只有当这些权限是由 other_role 授予给 my_role 时才会生效。
最后,如果你想要在撤销权限时同时删除依赖于该权限的对象,可以使用 CASCADE 选项。如果你只想要在没有依赖项的情况下才能撤销权限,则可以使用 RESTRICT 选项。例如:
REVOKE SELECT (column_name)
ON my_table
FROM my_role
CASCADE;这个语句将从 my_role 角色中撤销对 my_table 表中 column_name 列的 SELECT 权限,并且将删除依赖于这些权限的任何对象。
数据库
以下是一个 PostgreSQL 的 REVOKE 语句的示例,用于撤销已授予的权限:
REVOKE CREATE, CONNECT
ON DATABASE my_database
FROM my_role;这个语句将从 my_role 角色中撤销对 my_database 数据库的 CREATE 和 CONNECT 权限。
如果你想要撤销所有权限,可以使用 ALL PRIVILEGES 关键字:
REVOKE ALL PRIVILEGES
ON DATABASE my_database
FROM my_role;这个语句将从 my_role 角色中撤销对 my_database 数据库的所有权限。
如果你想要撤销授予其他角色的权限,可以使用 GRANTED BY 子句:
REVOKE CREATE, CONNECT
ON DATABASE my_database
FROM my_role
GRANTED BY other_role;这个语句将从 other_role 角色中撤销对 my_database 数据库的 CREATE 和 CONNECT 权限,并且只有当这些权限是由 other_role 授予给 my_role 时才会生效。
最后,如果你想要在撤销权限时同时删除依赖于该权限的对象,可以使用 CASCADE 选项。如果你只想要在没有依赖项的情况下才能撤销权限,则可以使用 RESTRICT 选项。例如:
REVOKE CREATE, CONNECT
ON DATABASE my_database
FROM my_role
CASCADE;这个语句将从 my_role 角色中撤销对 my_database 数据库的 CREATE 和 CONNECT 权限,并且将删除依赖于这些权限的任何对象。
schema
以下是一个 PostgreSQL 的 REVOKE 语句的示例,用于撤销已授予的权限:
REVOKE CREATE, USAGE
ON SCHEMA my_schema
FROM my_role;这个语句将从 my_role 角色中撤销对 my_schema 模式的 CREATE 和 USAGE 权限。
如果你想要撤销所有权限,可以使用 ALL PRIVILEGES 关键字:
REVOKE ALL PRIVILEGES
ON SCHEMA my_schema
FROM my_role;这个语句将从 my_role 角色中撤销对 my_schema 模式的所有权限。
如果你想要撤销授予其他角色的权限,可以使用 GRANTED BY 子句:
REVOKE CREATE, USAGE
ON SCHEMA my_schema
FROM my_role
GRANTED BY other_role;这个语句将从 other_role 角色中撤销对 my_schema 模式的 CREATE 和 USAGE 权限,并且只有当这些权限是由 other_role 授予给 my_role 时才会生效。
最后,如果你想要在撤销权限时同时删除依赖于该权限的对象,可以使用 CASCADE 选项。如果你只想要在没有依赖项的情况下才能撤销权限,则可以使用 RESTRICT 选项。例如:
REVOKE CREATE, USAGE
ON SCHEMA my_schema
FROM my_role
CASCADE;这个语句将从 my_role 角色中撤销对 my_schema 模式的 CREATE 和 USAGE 权限,并且将删除依赖于这些权限的任何对象。
#撤回在public模式下的权限
revoke select on all tables in schema public from 用户名;
#撤回在information_schema模式下的权限
revoke select on all tables in schema information_schema from 用户名;
#撤回在pg_catalog模式下的权限
revoke select on all tables in schema pg_catalog from 用户名;
#撤回对数据库的操作权限
revoke all on database 数据库名 from 用户名;