在pg中 角色(role)=用户(user)
一系列权限的集合,设定好的角色a、b、c等等,按需将角色给到用户,方便不用一个个权限给用户。
一个用户也是一个角色,可以把用户赋予给另个用户。
用户、角色是全局性的,不同库中看到的用户都是相同的。
初始化数据库时自动建了个与安装用户(系统)同名的超级用户,一般是postgres
默认建出来的user有登陆权限,role没有登陆权限。其他没区别。
任何数据库的逻辑结构对象(包括库)都属于某个用户。
创建用户
CREATE ROLE name [ [ WITH ] option [ ... ] ]
=
CREATE USER name [ [ WITH ] option [ ... ] ]
opyion可以是以下内容
·SUPERUSER|NOSUPERUSER:表示创建出来的用户是否为超级用户。当然只有超级用户才能创建超级用户。
·CREATEDB|NOCREATEDB:指定创建出来的用户是否有执行CREATE DATABASE的权限。
·CREATEROLE|NOCREATEROLE:指定创建出来的用户是否有创建其他角色的权限。
·CREATEUSER|NOCREATEUSER:指定创建出来的用户是否有创建其他用户的权限。
·INHERIT|NOINHERIT:如果创建的用户拥有某个或某几个角色,这时若指定INHERIT,则表示用户自动拥有相应角色的权限,否则该用户没有相应角色的权限。
·LOGIN|NOLOGIN:创建出来的用户是否有LOGIN权限,可以临时禁止用户的LOGIN权限,此时用户无法连接到数据库。
·CONNECTION LIMIT connlimit:这个参数指明了该用户可以使用的并发连接的数量。默认值是“-1”,表示没有限制。
·[ENCRYPTED|UNENCRYPTED]PASSWORD 'password':用于控制存储在系统表中的口令是否加密。
·VALID UNTIL 'timestamp':密码失效时间,如果不指定该子句,那么口令将永远有效。
·IN ROLE role_name [,...]:指定用户成为哪些角色的成员,请注意,没有任何选项可以把新角色添加为管理员,只有使用独立的GRANT命令才行。
·IN GROUP role_name [,...]:与IN ROLE相同,是已过时的语法。
·ROLE role_name [,...]:role_name将成为这个新建的角色的成员。
·ADMIN role_name [,...]:role_name将有这个新建角色的WITHADMIN OPTION权限。
·USER role_name [,...]:与ROLE子句相同,但已过时。
·SYSID uid:此子句主要是为了SQL向下兼容,实际没有什么用途。
权限概念:
任何数据库的逻辑结构对象(包括库)都属于某个用户。
创建用户时指定的权限(后续可alter role修改):
·超级用户的权限。
·创建数据库的权限。
·是否允许LOGIN的权限。
另一类(grant、revote来管理的权限)
·在数据库中创建模式(SCHEMA)。
·允许在指定的数据库中创建临时表的权限。
·连接某个数据库的权限。
·在模式中创建数据库对象的权限,如创建表、视图、函数等。
·在一些表中做SELECT、UPDATE、INSERT、DELETE等操作的 权限。
·在一张具体的表的列上进行SELECT、UPDATE、INSERT操作的 权限。
·对序列进行查询(执行序列的currval函数)、使用(执行序列的 currval函数和nextval函数)、更新的权限。
·在声明表上创建触发器的权限。
·把表、索引等建到指定表空间的权限。
权限管理层次:
1.特殊权限(登录、超级用户、建库权限、建用户权限 等等)
2.库中创建schema的权限
3.schema中创建 对象的权限(表、索引等)
4.表的增删改查权限
5.操作表的某些字段的权限
一些例子:
将查询myhaha表的权限赋予给所有用户(public)
GRANT select on TABLE myhaha to public;
想要给readonly用户只读权限
1.收回任何用户可在public schema中建表权限(先收回,后面再单独赋予给其他用户)
REVOKE CREATE ON SCHEMA public from public;
2.将现存的所有表的只读权限给到readonly用户
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
3.将后面建的所有表的只读权限给到readonly用户
ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to readonly;
格式:
GRANT some_privileges ON database_object_type object_name TO role_name;
REVOKE some_privileges ON database_object_type object_name FROM role_name;
some_privileges
ddl么有专门的权限,一般就是create权限。