当前位置:首页 » 操作系统 » 数据库角色权限

数据库角色权限

发布时间: 2023-03-08 22:21:51

⑴ Mysql 数据库,如何分角色权限建表

角色一直存在各个数据库中,比如 SQL Server、Oracle 等,MySQL 自从版本 8.0 release,引入了角色这个概念。


角色的概念

角色就是一组针对各种数据库权限的集合。比如,把一个角色分配给一个用户,那这个用户就拥有了这个角色包含的所有权限。一个角色可以分配给多个用户,另外一个用户也可以拥有多个角色,两者是多对多的关系。不过 MySQL 角色目前还没有提供类似于其他数据库的系统预分配的角色。比如某些数据库的 db_owner、 db_datareader 、 db_datawriter 等等。那接下来我分几个方面,来示例说明角色的使用以及相关注意事项。

示例 1:一个完整角色的授予步骤

用管理员创建三个角色:db_owner, db_datareader, db_datawriter

  • mysql> create role db_owner,db_datareader,db_datawriter;

  • Query OK, 0 rows affected (0.02 sec)

  • mysql> grant all on ytt_new.* to db_owner;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> grant select on ytt_new.* to db_datareader;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> grant insert,delete,update on ytt_new.* to db_datawriter;

  • Query OK, 0 rows affected (0.01 sec)

  • 创建三个普通用户,分别为 ytt1、ytt2、ytt3。mysql> create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt';Query OK, 0 rows affected (0.01 sec)

  • 分别授予这三个用户对应的角色。
  • -- 授权角色

  • mysql> grant db_owner to ytt1;

  • Query OK, 0 rows affected (0.02 sec)

  • -- 激活角色

  • mysql> set default role db_owner to ytt1;

  • Query OK, 0 rows affected (0.00 sec)

  • mysql> grant db_datareader to ytt2;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> set default role db_datareader to ytt2;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> grant db_datawriter to ytt3;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> set default role db_datawriter to ytt3;

  • Query OK, 0 rows affected (0.01 sec)

  • 以上是角色授予的一套完整步骤。那上面有点非常规的地方是激活角色这个步骤。MySQL 角色在创建之初默认是没有激活的,也就是说创建角色,并且给一个用户特定的角色,这个用户其实并不能直接使用这个角色,除非激活了才可以。
  • 示例 2:一个用户可以拥有多个角色

  • -- 用管理员登录并且创建用户

  • mysql> create user ytt4 identified by 'ytt';

  • Query OK, 0 rows affected (0.00 sec)

  • -- 把之前的三个角色都分配给用户ytt4.

  • mysql> grant db_owner,db_datareader,db_datawriter to ytt4;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 激活用户ytt4的所有角色.

  • mysql> set default role all to ytt4;

  • Query OK, 0 rows affected (0.02 sec)

  • -- ytt4 用户登录

  • root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc

  • ...

  • -- 查看当前角色列表

  • mysql> select current_role();

  • +--------------------------------------------------------+

  • | current_role() |

  • +--------------------------------------------------------+

  • | `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |

  • +--------------------------------------------------------+

  • 1 row in set (0.00 sec)

  • -- 简单创建一张表并且插入记录, 检索记录,完了删掉这张表

  • mysql> use ytt_new

  • Database changed

  • mysql> create table t11(id int);

  • Query OK, 0 rows affected (0.05 sec)

  • mysql> insert into t11 values (1);

  • Query OK, 1 row affected (0.02 sec)

  • mysql> select * from t11;

  • +------+

  • | id |

  • +------+

  • | 1 |

  • +------+

  • 1 row in set (0.00 sec)

  • mysql> drop table t11;

  • Query OK, 0 rows affected (0.04 sec)

  • 示例 3:用户在当前 session 里角色互换
  • 其实意思是说,用户连接到 MySQL 服务器后,可以切换当前的角色列表,比如由 db_owner 切换到 db_datareader。

  • -- 还是之前的用户ytt4, 切换到db_datareader

  • mysql> set role db_datareader;

  • Query OK, 0 rows affected (0.00 sec)

  • mysql> select current_role();

  • +---------------------+

  • | current_role() |

  • +---------------------+

  • | `db_datareader`@`%` |

  • +---------------------+

  • 1 row in set (0.00 sec)

  • -- 切换后,没有权限创建表

  • mysql> create table t11(id int);

  • ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'

  • -- 切换到 db_owner,恢复所有权限。

  • mysql> set role db_owner;

  • Query OK, 0 rows affected (0.00 sec)

  • mysql> create table t11(id int);

  • Query OK, 0 rows affected (0.04 sec)

  • 示例 4:关于角色的两个参数

  • activate_all_roles_on_login:是否在连接 MySQL 服务时自动激活角色mandatory_roles:强制所有用户默认角色
  • -- 用管理员连接MySQL,

  • -- 设置默认激活角色

  • mysql> set global activate_all_roles_on_login=on;

  • Query OK, 0 rows affected (0.00 sec)

  • -- 设置强制给所有用户赋予角色db_datareader

  • mysql> set global mandatory_roles='db_datareader';

  • Query OK, 0 rows affected (0.00 sec)

  • -- 创建用户ytt7.

  • mysql> create user ytt7;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 用 ytt7登录数据库

  • root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc

  • ...

  • mysql> show grants;

  • +-------------------------------------------+

  • | Grants for ytt7@% |

  • +-------------------------------------------+

  • | GRANT USAGE ON *.* TO `ytt7`@`%` |

  • | GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |

  • | GRANT `db_datareader`@`%` TO `ytt7`@`%` |

  • +-------------------------------------------+

  • 3 rows in set (0.00 sec)

  • 示例 5 :create role 和 create user 都有创建角色权限,两者有啥区别?

  • 以下分别创建两个用户 ytt8、ytt9,一个给 create role,一个给 create user 权限。
  • -- 管理员登录,创建用户ytt8,ytt9.

  • mysql> create user ytt8,ytt9;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> grant create role on *.* to ytt8;

  • Query OK, 0 rows affected (0.02 sec)

  • mysql> grant create user on *.* to ytt9;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 用ytt8 登录,

  • root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc

  • ...

  • mysql> create role db_test;

  • Query OK, 0 rows affected (0.02 sec)

  • -- 可以创建角色,但是不能创建用户

  • mysql> create user ytt10;

  • ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

  • mysql> q

  • Bye

  • -- 用ytt9 登录

  • root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc

  • ...

  • -- 角色和用户都能创建

  • mysql> create role db_test2;

  • Query OK, 0 rows affected (0.02 sec)

  • mysql> create user ytt10;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> q

  • Bye

  • 那这里其实看到 create user 包含了 create role,create user 即可以创建用户,也可以创建角色。
  • 示例 6:MySQL 用户也可以当角色来用

  • -- 用管理员登录,创建用户ytt11,ytt12.

  • mysql> create user ytt11,ytt12;

  • Query OK, 0 rows affected (0.01 sec)

  • mysql> grant select on ytt_new.* to ytt11;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 把ytt11普通用户的权限授予给ytt12

  • mysql> grant ytt11 to ytt12;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 来查看 ytt12的权限,可以看到拥有了ytt11的权限

  • mysql> show grants for ytt12;

  • +-----------------------------------+

  • | Grants for ytt12@% |

  • +-----------------------------------+

  • | GRANT USAGE ON *.* TO `ytt12`@`%` |

  • | GRANT `ytt11`@`%` TO `ytt12`@`%` |

  • +-----------------------------------+

  • 2 rows in set (0.00 sec)

  • -- 在细化点,看看ytt12拥有哪些具体的权限

  • mysql> show grants for ytt12 using ytt11;

  • +--------------------------------------------+

  • | Grants for ytt12@% |

  • +--------------------------------------------+

  • | GRANT USAGE ON *.* TO `ytt12`@`%` |

  • | GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |

  • | GRANT `ytt11`@`%` TO `ytt12`@`%` |

  • +--------------------------------------------+

  • 3 rows in set (0.00 sec)

  • 示例 7:角色的撤销

  • 角色撤销和之前权限撤销类似。要么 revoke,要么删除角色,那这个角色会从所有拥有它的用户上移除。
  • -- 用管理员登录,移除ytt2的角色

  • mysql> revoke db_datareader from ytt2;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 删除所有角色

  • mysql> drop role db_owner,db_datareader,db_datawriter;

  • Query OK, 0 rows affected (0.01 sec)

  • -- 对应的角色也从ytt1上移除掉了

  • mysql> show grants for ytt1;

  • +----------------------------------+

  • | Grants for ytt1@% |

  • +----------------------------------+

  • | GRANT USAGE ON *.* TO `ytt1`@`%` |

  • +----------------------------------+

  • 1 row in set (0.00 sec)

至此,我分了 7 个目录说明了角色在各个方面的使用以及注意事项,希望对大家有帮助。

⑵ oracle怎么查询当前数据库的所有角色权限


确定角色的权限:
select
*
from
role_tab_privs
;
包含了授予角色的对象权限
select
*
from
role_role_privs
;
包含了授予另一角色的角色
select
*
from
role_sys_privs
;
包含了授予角色的系统权限

确定用户帐户所授予的权限:
select
*
from
DBA_tab_privs
;
直接授予用户帐户的对象权限
select
*
from
DBA_role_privs
;
授予用户帐户的角色
select
*
from
DBA_sys_privs
;
授予用户帐户的系统权限

查看当前用户权限及角色:
SQL>
select
*
from
session_privs;
SQL>
select
*
from
user_role_privs;

查询某一角色的具体权限:
例如查看RESOURCE具有那些权限
SQL>
SELECT
*
FROM
DBA_SYS_PRIVS
WHERE
GRANTEE='RESOURCE';

⑶ ORACLE数据库中的权限和角色

ORACLE数据库中的权限和角色

Oracle数据库是一种大型关系型的数据库,我们知道当使用一个数据库时,仅仅能够控制哪些人可以访问数据库,哪些人不能访问数据库是无法满足数据库访问控制的。DBA需要通过一种机制来限制用户可以做什么,不能做什么,这在Oracle中可以通过为用户设置权限来实现。权限就是用户可以执行某种操作的权利。而角色是为了方便DBA管理权限而引入的一个概念,它实际上是一个命名的权限集合。

1 权限

Oracle数据库有两种途径获得权限,它们分别为:

① DBA直接向用户授予权限。

② DBA将权限授予角色(一个命名的包含多个权限的集合),然后再将角色授予一个或多个用户。

使用角色能够更加方便和高效地对权限进行管理,所以DBA应该习惯于使用角色向用户进行授予权限,而不是直接向用户授予权限。

Oracle中的权限可以分为两类:

•系统权限

•对象权限

1.1 系统权限

系统权限是在数据库中执行某种操作,或者针对某一类的对象执行某种操作的权利。例如,在数据库中创建表空间的权利,或者在任何模式中创建表的权利,这些都属于系统权限。在Oracle9i中一共提供了60多种权限。

系统权限的权利很大,通常情况下:

① 只有DBA才应当拥有alter database系统权限,该权限允许用户对数据库物理结构和可用性进行修改。

② 应用程序开发者一般应该拥有Create Table、Create View和Create Type等系统权限,用于创建支持前端的数据库模式对象。

③ 普通用户一般只具有Create session系统权限(可以通过Connection角色获得),只有Create Session系统权限的用户才能连接到数据库

④ 只有具有Grant Any PRivilege系统权限用户,或者获取了具有With Admin Option选项的系统权限的用户,才能够成为其它用户授予权限。

1.2对象权限

对象权限是针对某个特定的模式对象执行操作的权利。只能针对模式对象来设置和管理对象权限。

对于模式对象:表、视图、序列、存储过程、存储函数、包都可以对象设置权限。不同类型模式对象具有不同的对象权限。比如,表、视图等对象具有查询(Select)、修改(Update)、删除(Delete)等对象权限,而存储过程、存储函数等对象则具有执行(Execute)等对象权限。

但是并不是所有的模式对象都可以设置对象权限。比如簇、索引、触发器以及数据库链接等模式就不具有对象权限。这些模式对象的访问控制是通过相应的.系统权限来实现的,比如,要对索引进行修改,必须拥有Alter Any Index系统权限。

用户自动拥有他的模式中所有对象的全部对象权限,他可以将这些对象权限授予其他的用户或角色。比如,Test1用户创建了一个表Table1,在没有授权的情况下,用户Test2不能查询、修改、删除这个表。如果Test1将ETP表的Select对象权限授予了Test2,则该用户就可以查询Table1表了。如果在为其它用户授予对象权限时用了With Grant Option选项,被授予权限的用户还可以将这个权限在授予其他用户。

2 角色

2.1角色的概念

角色就是多个相关权限的命名集合。通过角色来进行对用户授予权限,可以大大简化DBA的工作量。比如,处于统一部门中的30多个用户都需要访问数据库中的一系列表,DBA可以将这些表的中合适的对象权限授予一个角色,然后在把这个角色授予这些用户,这样进行操作要比为没有用户进行授权要便捷多了,而且要对这些用户的权限进行统一修改,只需要修改角色的权限即可。

2.2角色的优点

通过角色为用户授予权限,而不是直接向各个用户授权,具有以下优点:

•简化权限管理 DBA将用户群分类,然后为每一类用户创建角色,并将该角色授予这类用户所需要的权限,最后在将改角色授予该类中的各个用户。这样不仅简化了授权操作,而且当这类用户的权限需求发生改变时,只需要把角色的权限进行改动,而不必修改每一位用户的权限。

•动态权限管理 角色可以被禁用或激活。当角色被禁止使用时,拥有该角色的用户不再拥有授予改角色的权限了。这样就可以对多个用户的权限进行动态控制了。

•灵活的编程能力 角色是存储在数据字典中的,并且可以为角色设置口令。这样就能够在应用程序中对角色进行控制。比如禁用或者激活等操作。

下面以Oracle9i为例,给出具体的实现用户授权:

(1)设定各种角色,及其权限

CREATE ROLE checkerrole DENTIFIEDBYxm361001;

CREATE ROLE defaultrole IDENTIFIEDBYdefaultrole;

GRANT SELECT,UPDATE ON

account.paytable TO checkerrole;

GRANT CONNECT TO defaultrole;

(2)创建用户

CREATE USER xiaoli IDENTIFIEDBY xiaoli;

(3)授权

GRANT checkerrole TO xiaoli;

GRANT defaultrole TO xiaoli;

(4)设定用户缺省的角色

ALTER USER xiaoli DEFAULTROLE defaultrole;

(5)注册过程

CONNECT xiaoli/xiaoli@oracle

此时用户只有其缺省角色的权限。

(6)激活角色

SET ROLE checkerrole IDENTIFIEDBY xm361001;

----操作成功后,xiaoli拥有checkerrole的权限。

----这里的角色和口令是固定的,在应用系统中可以由应用管理人员自行设置则更为方便安全

;

⑷ SQL数据库的角色的定义,分类及角色的权限分配操作

角色是一个强大的工具,使您得以将用户集中到一个单元中,然后对该单元应用权限。对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。可以建立一个角色来代表单位中一类工作人员所执行的工作,然后给这个角色授予适当的权限。当工作人员开始工作时,只须将他们添加为该角色成员,当他们离开工作时,将他们从该角色中删除。而不必在每个人接受或离开工作时,反复授予、拒绝和废除其权限。权限在用户成为角色成员时自动生效。

Microsoft® Windows NT® 和 Windows® 2000 组的使用方式与角色很相似。有关更多信息,请参见组。

如果根据工作职能定义了一系列角色,并给每个角色指派了适合这项工作的权限,则很容易在数据库中管理这些权限。之后,不用管理各个用户的权限,而只须在角色之间移动用户即可。如果工作职能发生改变,则只须更改一次角色的权限,并使更改自动应用于角色的所有成员,操作比较容易。

在 Microsoft® SQL Server™ 2000 和 SQL Server 7.0 版中,用户可属于多个角色。

以下脚本说明登录、用户和角色的添加,并为角色授予权限。

USE master

GO

sp_grantlogin 'NETDOMAIN\John'

GO

sp_defaultdb 'NETDOMAIN\John', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Sarah'

GO

sp_defaultdb 'NETDOMAIN\Sarah', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Betty'

GO

sp_defaultdb 'NETDOMAIN\Betty', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Ralph'

GO

sp_defaultdb 'NETDOMAIN\Ralph', 'courses'

GO

sp_grantlogin 'NETDOMAIN\Diane'

GO

sp_defaultdb 'NETDOMAIN\Diane', 'courses'

GO

USE courses

GO

sp_grantdbaccess 'NETDOMAIN\John'

GO

sp_grantdbaccess 'NETDOMAIN\Sarah'

GO

sp_grantdbaccess 'NETDOMAIN\Betty'

GO

sp_grantdbaccess 'NETDOMAIN\Ralph'

GO

sp_grantdbaccess 'NETDOMAIN\Diane'

GO

sp_addrole 'Professor'

GO

sp_addrole 'Student'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\John'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\Sarah'

GO

sp_addrolemember 'Professor', 'NETDOMAIN\Diane'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Betty'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Ralph'

GO

sp_addrolemember 'Student', 'NETDOMAIN\Diane'

GO

GRANT SELECT ON StudentGradeView TO Student

GO

GRANT SELECT, UPDATE ON ProfessorGradeView TO Professor

GO

该脚本给 John 和 Sarah 教授提供了更新学生成绩的权限,而学生 Betty 和 Ralph 只能选择他们自己的成绩。Diane 因同时教两个班,所以添加到两个角色中。ProfessorGradeView 视图应将教授限制在自己班学生的行上,而 StudentGradeView 应限制学生只能选择自己的成绩。

SQL Server 2000 和 SQL Server 7.0 版在安装过程中定义几个固定角色。可以在这些角色中添加用户以获得相关的管理权限。下面是服务器范围内的角色。

固定服务器角色
描述

sysadmin
可以在 SQL Server 中执行任何活动。

serveradmin
可以设置服务器范围的配置选项,关闭服务器。

setupadmin
可以管理链接服务器和启动过程。

securityadmin
可以管理登录和 CREATE DATABASE 权限,还可以读取错误日志和更改密码。

processadmin
可以管理在 SQL Server 中运行的进程。

dbcreator
可以创建、更改和除去数据库。

diskadmin
可以管理磁盘文件。

bulkadmin
可以执行 BULK INSERT 语句。

可以从 sp_helpsrvrole 获得固定服务器角色的列表,可以从 sp_srvrolepermission 获得每个角色的特定权限。

每个数据库都有一系列固定数据库角色。虽然每个数据库中都存在名称相同的角色,但各个角色的作用域只是在特定的数据库内。例如,如果 Database1 和 Database2 中都有叫 UserX 的用户 ID,将 Database1 中的 UserX 添加到 Database1 的 db_owner 固定数据库角色中,对 Database2 中的 UserX 是否是 Database2 的 db_owner 角色成员没有任何影响。

固定数据库角色
描述

db_owner
在数据库中有全部权限。

db_accessadmin
可以添加或删除用户 ID。

db_securityadmin
可以管理全部权限、对象所有权、角色和角色成员资格。

db_ddladmin
可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。

db_backupoperator
可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。

db_datareader
可以选择数据库内任何用户表中的所有数据。

db_datawriter
可以更改数据库内任何用户表中的所有数据。

db_denydatareader
不能选择数据库内任何用户表中的任何数据。

db_denydatawriter
不能更改数据库内任何用户表中的任何数据。

可以从 sp_helpdbfixedrole 获得固定数据库角色的列表,可以从 sp_dbfixedrolepermission 获得每个角色的特定权限。

数据库中的每个用户都属于 public 数据库角色。如果想让数据库中的每个用户都能有某个特定的权限,则将该权限指派给 public 角色。如果没有给用户专门授予对某个对象的权限,他们就使用指派给 public 角色的权限。

热点内容
如何撤回密码 发布:2025-08-22 02:30:36 浏览:675
安卓系统怎么用蓝牙传给苹果手机 发布:2025-08-22 02:27:51 浏览:476
android获取数组 发布:2025-08-22 02:24:04 浏览:647
徵型压缩机 发布:2025-08-22 02:10:15 浏览:495
真空压缩袋能上飞机吗 发布:2025-08-22 02:10:01 浏览:95
怎么删除服务器文件 发布:2025-08-22 02:04:07 浏览:169
炉石传说威胁脚本投降 发布:2025-08-22 01:54:10 浏览:331
大大哇脚本 发布:2025-08-22 01:49:32 浏览:95
python2pip 发布:2025-08-22 01:48:56 浏览:389
php和null 发布:2025-08-22 01:48:49 浏览:965