PostgreSQL-2-用户权限管理
1、创建与删除用户
CREATE ROLE rolename; 方法1,创建角色
CREATE USER username; 方法2,创建用户
CREATE USER指令创建的用户默认是有登录权限的,而CREATE ROLE没有
DROP ROLE rolename;
DROP USER username;
删除用户/角色
\du
\du username
查看用户和用户的属性
\du CREATE ROLE;
\du CREATE USER;
查看可设置的管理权限(查看属性和成员属于)
SUPERUSER | NOSUPERUSER → 超级用户,只有超级用户可以创建超级用户
CREATEDB | NOCREATEDB → 创建出来的用户是否有执行 CREATE DATABASE 的权限
CREATEROLE | NOCREATEROLE → 创建出来的用户是否有创建其他角色的权限
LOGIN | NOLOGIN → 创建出来的用户是否有Login的权限
INHERIT | NOINHERIT → 如果创建的一个用户拥有某一个或某几个角色,若指定INHERIT,则表示该用户自动拥有相应角色的权限
CONNECTION LIMIT connlimit → 该用户可以使用的并发连接数量,默认值为-1,表示没有限制
CREATE ROLE role_name WITH optional_permissions;
在创建用户时设定登录权限,比如:
CREATE ROLE r1 WITH SUPERUSER;
CREATE USER u1 WITH PASSWORD 'abc';
2、修改用户权限
ALTER ROLE username WITH attribute_options;
修改权限的命令格式,比如:
ALTER ROLE r1 WITH CREATEDB;
ALTER ROLE u1 WITH PASSWORD 'aaa';
3、切换用户
\c - username; 现有database,切换用户
\c database username; 切换database,并且切换用户
提示:You are now connected to database "..." as user "...".
这里u1没有CREATEDB权限,如果输入CREATE DATABASE test1,会提示permission denied
4、设置用户权限
CREATE TABLE room(no int, name text, age int);
INSERT INTO room VALUES(1, '小明', 19);
INSERT INTO room VALUES(2, '小红', 18);
INSERT INTO room VALUES(3, '老王', 35);
SELECT * FROM room;
创建一个表格,查看数据
GRANT permission_type ON table_name TO role_name;
给用户设置权限语法格式
GRANT UPDATE ON room TO u1; 给u1对于room表格,赋予UPDATE权限
GRANT ALL ON room TO u1; 给u1对于room表格,赋予所有权限
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO u1; 给u1对于postgres数据库所有表格,赋予SELECT权限
REVOKE permission_type ON table_name FROM user_name;
给用户撤销访问权限
REVOKE SELECT ON room FROM u1; 撤销u1对room表格 SELECT的权限