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 (1<<0) / forrelations /
#defineACL_SELECT (1<<1)
#defineACL_UPDATE (1<<2)
#defineACL_DELETE (1<<3)
#defineACL_TRUNCATE (1<<4)
#defineACL_REFERENCES (1<<5)
#defineACL_TRIGGER (1<<6)
#defineACL_EXECUTE (1<<7) / for functions /
#defineACL_USAGE (1<<8) / for languages, namespaces, FDWs, and
servers /
#defineACL_CREATE (1<<9) / for namespaces and databases /
#defineACL_CREATE_TEMP (1<<10) / for databases /
#defineACL_CONNECT (1<<11) / 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-39pg_roles字段
名字
类型
引用
描述
rolname
name
角色名
rolsuper
bool
有超级用户权限的角色
rolcreaterole
bool
可以创建更多角色的角色
rolcreatedb
bool
可以创建数据库的角色
rolcatupdate
bool
可以直接更新系统表的角色。(除非这个字段为真,否则超级用户也不能干这个事情。)
rolcanlogin
bool
可以登录的角色,也就是说,这个角色可以给予初始化会话认证的标识符。
rolpassword
text
不是口令(总是 )
rolvaliduntil
timestamptz
口令失效日期(只用于口令认证);如果没有失效期,为 NULL
rolconfig
text[]
运行时配置变量的会话缺省
系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等(对用户而言)
对象权限: 允许用户 *** 纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等(是针对表或视图而言的)
1系统权限
超过一百多种有效的权限(SELECT FROM SYSTEM_PRIVILEGE_MAP查)
数据库管理员具有高级权限以完成管理任务,例如:
–创建新用户
–删除用户
–删除表
–备份表
系统权限分类:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
a常用的系统权限:
CREATE SESSION 创建会话
CREATE SEQUENCE 创建序列
CREATE SYNONYM 创建同名对象
CREATE TABLE 在用户模式中创建表
CREATE ANY TABLE 在任何模式中创建表
DROP TABLE 在用户模式中删除表
DROP ANY TABLE 在任何模式中删除表
CREATE PROCEDURE 创建存储过程
EXECUTE ANY PROCEDURE 执行任何模式的存储过程
CREATE USER 创建用户
DROP USER 删除用户
CREATE VIEW 创建视图
2对象权限
不同的对象具有不同的对象权限
对象的拥有者拥有所有权限
对象的拥有者可以向外分配权限
ORACLE一共有种对象权限
对象权限 表 视图 序列 过程
修改(alter) √ √
删除(delete) √ √
执行(execute) √
索引(index) √
插入(insert) √ √
关联(references) √ √
选择(select) √ √ √
更新(update) √ √
另外,connect和resource的权限如下所示
CONNECT角色:仅具有创建SESSION的权限
RESOURCE角色:仅具有创建CLUSTER,INDEXTYPE,OPERATOR,PROCEDEURE,SEQUENCE,TABLE,TRIGGER,TYPE的权限。同时,当把ORACLE resource角色授予一个user的时候,不但会授予ORACLE resource角色本身的权限,而且还有unlimited tablespace权限,但是,当把resource授予一个role时,就不会授予unlimited tablespace权限。
确实没有创建视图的权限,由此看来如果需要创建视图权限,只能单独授权:
GRANT CREATE VIEW TO 用户;
①对象权限 作用:决定用户对数据库对象所执行的 *** 作,包括用户对数据库中的表、视图、列或存储过程等对象的 *** 作权限
②语句权限 作用:决定用户能否 *** 作数据库和创建数据库对象
③隐含权限 作用:控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。
grant 权限 on 数据库对象 to 用户
一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant select on testdb to common_user@’%’
grant insert on testdb to common_user@’%’
grant update on testdb to common_user@’%’
grant delete on testdb to common_user@'%'
或者
grant select, insert, update, delete on testdb to common_user@’%’
二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。
grant 创建、修改、删除 MySQL 数据表结构权限。
grant create on testdb to developer@’1921680%’;
grant alter on testdb to developer@’1921680%’;
grant drop on testdb to developer@’1921680%’;
grant *** 作 MySQL 外键权限。
grant references on testdb to developer@’1921680%’;
grant *** 作 MySQL 临时表权限。
grant create temporary tables on testdb to developer@’1921680%’;
grant *** 作 MySQL 索引权限。
grant index on testdb to developer@’1921680%’;
grant *** 作 MySQL 视图、查看视图源代码 权限。
grant create view on testdb to developer@’1921680%’;
grant show view on testdb to developer@’1921680%’;
grant *** 作 MySQL 存储过程、函数 权限。
grant create routine on testdb to developer@’1921680%’; — now, can show procedure status
grant alter routine on testdb to developer@’1921680%’; — now, you can drop a procedure
grant execute on testdb to developer@’1921680%’;
三、grant 普通 DBA 管理某个 MySQL 数据库的权限。
grant all privileges on testdb to dba@’localhost’
其中,关键字 “privileges” 可以省略。
四、grant 高级 DBA 管理 MySQL 中所有数据库的权限。
grant all on to dba@’localhost’
五、MySQL grant 权限,分别可以作用在多个层次上。
1 grant 作用在整个 MySQL 服务器上:
grant select on to dba@localhost; — dba 可以查询 MySQL 中所有数据库中的表。
grant all on to dba@localhost; — dba 可以管理 MySQL 中的所有数据库
2 grant 作用在单个数据库上:
grant select on testdb to dba@localhost; — dba 可以查询 testdb 中的表。
3 grant 作用在单个数据表上:
grant select, insert, update, delete on testdborders to dba@localhost;
这里在给一个用户授权多张表时,可以多次执行以上语句。例如:
grant select(user_id,username) on smpusers to mo_user@’%’ identified by ‘123345′;
grant select on smpmo_sms to mo_user@’%’ identified by ‘123345′;
4 grant 作用在表中的列上:
grant select(id, se, rank) on testdbapache_log to dba@localhost;
5 grant 作用在存储过程、函数上:
grant execute on procedure testdbpr_add to ‘dba’@'localhost’
grant execute on function testdbfn_add to ‘dba’@'localhost’
六、查看 MySQL 用户权限
查看当前用户(自己)权限:
show grants;
查看其他 MySQL 用户权限:
show grants for zhangkh@localhost;
七、撤销已经赋予给 MySQL 用户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
grant all on to dba@localhost;
revoke all on from dba@localhost;
八、MySQL grant、revoke 用户权限注意事项
1 grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
2 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“
grant select on testdb to dba@localhost with grant option;
这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。
mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。
授权表的内容有如下用途:
user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。
db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。
host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。
tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。
columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。
注:
对于GRANT USAGE ON,查看手册有如下介绍和实例:
mysql> GRANT USAGE ON TO ‘zhangkh’@'localhost’;
一个账户有用户名zhangkh,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为’N'。假定你将在以后将具体权限授予该账户。
怎样允许他人查看或执行查询,但不能更改数据或查询设计?
答:在安全工作组里,可以指定他人查看查询返回数据的权限。如果是 *** 作查询,还可以允许他们执行查询,即使限制他们不得查看查询的基表或基础查询。
1、在“设计”视图中打开查询。
2、在查询“设计”视图中单击设计网格与字段列表外的任何地方,以选定查询。
3、单击工具栏上的“属性”按钮 ,以显示查询的属性表。
4、将“执行权限”属性设置为“所有者的”。
设置了此属性后,应出现以下情形:
所有用户都具有查询所有者的查看或执行查询权限。
只有查询所有者才能保存更改过的查询。
只有查询所有者才能更改查询的所有权。
注释 也可以设置所有新查询的默认权限。请在“工具”菜单上单击“选项”,再单击“表/查询”选项卡,然后单击想要使用的“执行权限”选项。
问:怎样定义用户级安全?
答:
1、加入一个安全工作组或新建一个工作组信息文件。
要点 要完全确保数据库的安全,请不要使用安装 Microsoft Access
时创建的工作组信息文件所定义的默认工作组。而应该确保定义所加入的工作组的工作组信息文件是使用唯一的工作组 ID (WID) 创建的,否则应该创建一个新的工作组。
2、激活“登录”对话框。
*** 作方法:启动 Microsoft Access ,打开数据库,
单击“工具”菜单“安全”子菜单中的“用户与组帐号”命令,单击“用户”选项卡,确保在“名称”框中预定义的“管理员”用户帐号呈高亮度显示,单击“更改登录密码”选项卡,单击“新密码”框,然后键入新密码。不要在“旧密码”框中输入任何内容,
在“验证”框中再次键入密码进行确认,然后单击“确定”按钮。退出ACCESS并重新启动ACCESS,就会出现“登录”对话框。
3、创建管理员的用户帐号。
*** 作方法:
1)打开工作组管理器,按下“联接。。。”按钮,选择 使用在第1 步骤中创建的安全工作组信息文件,退出管理器,启动 Microsoft Access。
要点 如果要确保数据库是完全安全的,请不要使用安装 Microsoft Access
时创建的工作组信息文件中定义的默认工作组,并确保定义所用工作组的工作组信息文件是以唯一的工作组 ID (WID) 创建的,否则就应该重新创建一个工作组信息文件。
2)选择“工具”菜单“安全”子菜单中的“用户与组帐号”命令,单击“用户”选项卡上的“新建”按钮, 在“新用户/组”对话框中,键入管理员帐号名称和个人 ID
(PID),然后单击“确定”按钮新建帐号。
警告 一定要记住正确的帐号名和 PID,包括字母的大小写,并其将其放在安全的地方。如果要重新创建帐号,必须提供其名称和 PID。遗忘或丢失了帐号名和 PID
将无法恢复。
3)在“可用的组”框中,单击“管理员组”,然后单击“添加”按钮。Microsoft Access
将把新的管理员帐号添加到管理员组并在“隶属于”框中显示“管理员组”。
4)单击“确定”按钮新建管理员帐号。
4、退出 Microsoft Access 并以新建的管理员身份登录。
5、删除管理员组中的管理员帐号。
*** 作方法:选择“工具”菜单“安全”子菜单中的“用户与组帐号”命令,在“用户”选项卡上的“名称”框中输入要移去的用户。在“隶属于”框中,选择要“管理员组”的组,然后单击“删除”按钮。
6、打开要设置安全的数据库。
7、单击“工具”菜单“安全”子菜单中的“用户级安全性向导”命令。
8、根据向导对话框中的指示完成各个步骤。 ]
“用户级安全性向导”将创建一个新的数据库,并将原有数据库中所有对象的副本导出到新的数据库中,然后通过取消用户组对新数据库对象的所有权限,为向导第一个对话框中的选定对象类型设置安全,然后加密新数据库。原有数据库没有进行任何更改。表之间的关系和所有的链接表在新的数据库中都将重建。
现在,只有在步骤 1
中加入的工作组管理员组成员可以访问新数据库中设置了安全的对象。“用户”组则不具备对这些对象的权限。要限制用户和/或组对这些对象的访问必须为其设置权限。
另外,你可以定义不同的试图,这样就给不同的人,不同的信息表示了
以上就是关于PostgreSQL的用户,角色跟权限管理怎么解决全部的内容,包括:PostgreSQL的用户,角色跟权限管理怎么解决、Oracle用户的权限都有哪些、数据库中用户权限的种类有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)