接上篇:https://developer.aliyun.com/article/1223096?spm=a2c6h.13148508.setting.18.44ec4f0eNvAByn
修改角色的属性可以用\h alter role命令。
上图为修改角色属性示例。
用户与角色的删除有两种方式。
• 方式一:通过dropuser命令删除用户。删除时如果没有设置信任关系,则需要指定登录的用户名、密码,且此用户名必须拥有创建用户的权限,方能登录到数据库执行dropuser命令。
• 方式二:在psql命令行使用drop删除。删除时需要附上判断用户/角色是否存在的语句,避免用户/角色不存在而产生报错。尤其是脚本里,如果产生报错,则会影响后续的执行。
注意,只有超级用户能够删除超级用户,只有具有createrole权限的用户才能删除非超级用户。且删除用户前,需要删除依赖该用户的对象、权限等信息,或将权限授权给其他用户,以保证对象的安全性。PG不支持cascade此类级联的删除方式。此外,当前登录的对象也无法删除,需退出登陆后再做删除操作。
比如,删除u1时需要先通过\d命令查看其关联的对象。而除了对象以外,还需要通过\dn查看其是否存在相关schema。如上图,显示u1下还存在一个sport schema,因此,需要通过drop schema sport将该schema删除。
再次执行删除u1操作,提示在testdb上还存在相关权限。需要通过revoke all命令将授权给用户在testdb数据库上的所有权限撤回,随后即可删除用户。
为角色授权以后,如果要使用角色里的权限,需要通过set role命令启用该角色。
如上图所示,启用角色前,不允许创建schema。
而执行set role命令后,schema创建成功。
每个数据库对象都有一个owner,owner默认情况下拥有该对象的所有权限。数据库中所有权限都与角色挂钩。对超级用户的权限不做检查,其他用户需要通过ACL。对于数据库对象,所有者和超级用户可以做任何操作,其他用户需要通过ACL。
PG数据库下的权限管理可以分为几个层级,分别为实例权限、数据库权限、表空间、schema权限以及object对象(表、视图、索引)。
实例级别的权限主要通过pg_hba.conf控制实例访问的隔离级别来实现。该文件存在于PGDATA目录下,每一列分别为类型、访问的数据库、访问的用户、客户端地址以及访问方式。
如上图,第一条信息中的host代表主机,all代表所有数据库和用户,127.0.0.1指本地地址,trust指信任,意味本地用户登陆无需用户密码。
第二条信息中的0.0.0.0指所有外部主机,意为拒绝外部任意主机以postgres用户登录。
第三条信息中的md5指通过用户和密码登录。
上图第一行代表任何用户访问任何数据库时都需要密码访问。设置完以后通过reload重新加载方可生效。
访问方式如上图所示。
PolarDB数据库上,只要用户有login权限,即允许所有用户连接到数据库。另外,不允许除了超级用户和owner以外的任何人在数据库中创建schema。系统会自动创建名为public的schema,允许任何人在里面创建对象。
比如创建一个新的数据库名为newdb1,则所有用户都可以登录,上图为以u2用户登录,而且可以在数据库上创建表。
如上图,创建了t1表,其schema属于public。因此创建了数据库以后,默认数据库下存在public模式的schema,u2用户即可以public模式创建t1表。
上图语句实现了允许用户在指定的数据库下做任何操作。
如上图,u2用户想要创建一个schema被拒绝。因为数据库上已经存在一个schema。
而执行grant create on database newdb1 to u2语句后,u2即可在数据库上创建schema。创建完后,可以看到该数据库下存在两个schema模式,分别是public和s1。
模式是指某个用户下所有对象的集合。
接下篇:https://developer.aliyun.com/article/1223094?groupCode=polardbforpg