数据的授权包括:
- 授权读取数据
- 授权插入新数据
- 授权更新数据
- 授权删除数据
- 每种类型的授权都称为一个权限(privilege)
- 在数据库的某些特定部分上授权给用户所有这些类型的权限,或者完全不授权,或者这些权限的一个组合
数据库模式上的授权包括:
- 创建、修改或删除关系等
数据库管理员:拥有最大的授权形式
1. 权限授予
- 一个创建了新关系的用户将被自动被授予该关系上的所有权限;
- 授予权限
- grant 语句:grant <权限列表> on <关系/视图名> to <用户/角色名>
- select
- grant select on department to User_1
- update
- grant update (budget) on department to User_1
- update 权限既可以在关系的所有属性上授予又可以只在某些属性上授予;
- insert
- insert 权限也可以指定属性列表:对关系的任何插入必须只针对这些属性,系统将其它属性要么赋默认值,要么赋null;
- delete
- all privileges
- select
- grant 语句:grant <权限列表> on <关系/视图名> to <用户/角色名>
SQL
授权机制可以对整个关系或一个关系的指定属性授予权限,而不允许对任一关系的指定元祖授予权限;
# create user "User_1"@"localhost" identified by "123456";
# flush privileges;
grant select on department to `User_1`@`localhost`;
grant update (budget) on department to `User_1`@`localhost`; # identified by "123456";
2. 权限转移
- 默认情况下,被授予权限的用户/角色无权把此权限授予其它角色;
- 允许权限转移:with grant option
- grant select on department to User_1 with grant option;
- 授权图
authorization graph
:
- 用户具有权限的充分必要条件是:当且仅当存在从授权图的根(即代表数据库管理员的顶点)到代表给用户顶点的路径;
3. 权限收回
-
权限收回
- revoke 语句:revoke <权限列表> on <关系/视图名> from <用户/角色名>
- revoke select on department from User_1;
- revoke update (budget) on department from User_1;
- 如果被收回权限的用户已经把权限授予其它用户,权限的收回会更加复杂;
- revoke 语句:revoke <权限列表> on <关系/视图名> from <用户/角色名>
-
用户相互授权破坏权限收回规则:根据用户具有权限的充分必要条件可得,通过相互授权破坏授权规则不可行;
-
级联收回:在大多数数据库系统中,级联收回是默认行为
- 防止级联收回:restrict(mysql不支持)
- revoke select on department from User_1 restrict;
- 允许级联收回:cascade(mysql不支持)
- 默认,可省略;
- 默认,可省略;
- 防止级联收回:restrict(mysql不支持)
-
收回授权权限:revoke grant option, select on department from User_1;
References:
[1] Abraham Silberschatz, Henry F Korth, S Sudarshan. Database System Concepts. New York: McGraw-Hill, 2010
Database System Concepts