十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
我们使用Postgresql数据库的时候,默认都是用postgres用户进行数据操作。但是有时为了数据安全,我们会另外建一些账号给相关的工作人员使用。那么Postgresql数据库中如何新建登录用户呢?下面我给大家分享一下。
成都创新互联从2013年成立,先为金林等服务建站,金林等地企业,进行企业商务咨询服务。为金林企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
工具/材料
pgAdmin4
01
首先打开Postgresql的管理工具pgAdmin4,接着双击服务器名称,如下图所示
02
在弹出的Connect to Server界面中输入postgres用户的密码,然后点击OK按钮,如下图所示
03
进入到数据库以后右键单击"登录/组角色"选项,选择Create下面的Login/Group Role选项,如下图所示
04
接下来会弹出创建登录用户的界面,我们先给用户起一个名字,尽量是英文,如下图所示
05
然后切换到Definition页卡,给登录用户设置一个登录密码,如下图所示,注意Connection limit要设置为-1
06
接着切换到Privileges界面,这里需要给登录用户设置一下操作权限,大家可以根据自己的需要设置即可,如下图所示
07
接下来切换到Membership页卡,给登录用户设置一个角色,这里我直接把管理员的角色给它了,如下图所示
08
上述设置完毕以后回到数据库主界面,我们就可以看到"登录/组角色"下面就已经有我们新建的登录用户了,如下图所示
09
最后我们断开当前的连接,用新建的用户进行登录,如果登录正常的话则代表一切设置成功,如下图所示
查询表pg_authid:
该系统表存储有关数据库认证的角色信息,在PostgreSQL中角色可以表现为用户和组两种形式。对于用户而言只是设置了rolcanlogin标志的角色。
由于该表包含口令数据,所以它不是公共可读的。PostgreSQL中提供了另外一个建立在该表之上的系统视图pg_roles,该视图将口令字段填成空白。
Pg权限分为两部分,一部分是“系统权限”或者数据库用户的属性,可以授予role或user(两者区别在于login权限);一部分为数据库对象上的操作权限。对超级用户不做权限检查,其它走acl。对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走acl。在pg里,对acl模型做了简化,组和角色都是role,用户和角色的区别是角色没有login权限。
可以用下面的命令创建和删除角色,
CREATE ROLE name;
DROP ROLE name;
为了方便,也可以在 shell 命令上直接调用程序 createuser 和 dropuser,这些工具对相应命令提供了封装:
createuser name
dropuser name
数据库对象上的权限有:SELECT,INSERT, UPDATE,DELETE,RULE, REFERENCES,TRIGGER,CREATE, TEMPORARY,EXECUTE,和 USAGE等,具体见下面定义
typedefuint32AclMode; /* a bitmask of privilege bits */
#define ACL_INSERT (10) /* forrelations */
#defineACL_SELECT (11)
#defineACL_UPDATE (12)
#defineACL_DELETE (13)
#defineACL_TRUNCATE (14)
#defineACL_REFERENCES (15)
#defineACL_TRIGGER (16)
#defineACL_EXECUTE (17) /* for functions */
#defineACL_USAGE (18) /* for languages, namespaces, FDWs, and
* servers */
#defineACL_CREATE (19) /* for namespaces and databases */
#defineACL_CREATE_TEMP (110) /* for databases */
#defineACL_CONNECT (111) /* for databases */
#defineN_ACL_RIGHTS 12 /* 1plus the last 1
#defineACL_NO_RIGHTS 0
/*Currently, SELECT ... FOR UPDATE/FOR SHARE requires UPDATE privileges */
#defineACL_SELECT_FOR_UPDATE ACL_UPDATE
我们可以用特殊的名字 PUBLIC 把对象的权限赋予系统中的所有角色。 在权限声明的位置上写 ALL,表示把适用于该对象的所有权限都赋予目标角色。
beigang=# grantall on schema csm_ca to public;
GRANT
beigang=# revoke all on schema csm_ca frompublic;
REVOKE
beigang=#
每种对象的all权限定义如下:
/*
* Bitmasks defining "allrights" for each supported object type
*/
#defineACL_ALL_RIGHTS_COLUMN (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_REFERENCES)
#defineACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER)
#defineACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)
#defineACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)
#define ACL_ALL_RIGHTS_FDW (ACL_USAGE)
#defineACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)
#defineACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
#defineACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
#defineACL_ALL_RIGHTS_LARGEOBJECT (ACL_SELECT|ACL_UPDATE)
#defineACL_ALL_RIGHTS_NAMESPACE (ACL_USAGE|ACL_CREATE)
#defineACL_ALL_RIGHTS_TABLESPACE (ACL_CREATE)
用户的属性可参见下图:
视图 pg_roles提供访问数据库角色有关信息的接口。 它只是一个 pg_authid 表的公开可读部分的视图,把口令字段用空白填充了。
Table 42-39.pg_roles字段
名字
类型
引用
描述
rolname
name
角色名
rolsuper
bool
有超级用户权限的角色
rolcreaterole
bool
可以创建更多角色的角色
rolcreatedb
bool
可以创建数据库的角色
rolcatupdate
bool
可以直接更新系统表的角色。(除非这个字段为真,否则超级用户也不能干这个事情。)
rolcanlogin
bool
可以登录的角色,也就是说,这个角色可以给予初始化会话认证的标识符。
rolpassword
text
不是口令(总是 ********)
rolvaliduntil
timestamptz
口令失效日期(只用于口令认证);如果没有失效期,为 NULL
rolconfig
text[]
运行时配置变量的会话缺省