1
数据库原理与应用技术
1.6.6.1 5.6.1 授权
5.6.1 授权

DBMS通常采用自主存取控制保证数据库数据的安全性,通过授权使不同的用户对不同的数据库对象有不同的存取权限。SQL Server中的权限分为语句权限和对象权限。

授权是指允许具有特定权限的用户有选择地、动态地把某些权限授予其他用户,必要时还可以收回这些权限。

1. 语句权限

语句权限主要是指系统特权或DBA权限,也称为数据库级权限。DBA或数据库的拥有者可以把某些SQL语句的执行权限授予其他用户。语句权限包括CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE、CREATE VIEW、BACKUP DATABASE、BACKUP LOG。

授予语句权限的语句格式如下:

GRANT ﹛ALL︱语句权限1[,…,n]﹜

TO <用户1>[,…,n]

【例5-72】将在学生数据库上创建表和视图的权限授予用户“胡峰”,写出相关语句。

解:GRANT CREATE TABLE,CREATE VIEW TO 胡峰

2. 对象权限

对象权限是指对表、视图、用户自定义函数和存储过程等对象的操作权限。数据库对象创建以后,通常只有创建它的拥有者才可以访问该对象。拥有者可以把对象的访问权限授予其他合法的数据库用户,相应的用户才能访问该数据库对象。

当在表或视图上授予对象权限时,对象权限列表可以包括SELECT、INSERT、DELETE、UPDATE等。权限中的一个或多个操作。

不同类型的操作对象有不同的操作权限,常见的操作权限如表5-4所示。

表5-4 常见的操作权限

对属性列和视图的操作权限有查询(SELECT)、插入(INSERT)、修改(UPDATE)和删除(DELETE)及这4种权限的总和(ALL PRIVILEGES)。

对基本表的操作权限有查询(SELECT)、插入(INSERT)、修改(UPDATE)、删除(DELETE)、修改表(ALTER)和建立索引(INDEX)及这6种权限的总和(ALL PRIVILEGES)。

对于数据库,可以有建立表(CREATE TABLE)的权限,该权限属于DBA,可由DBA授予普通用户,普通用户拥有此权限后可以建立表,表的属主拥有对该表的一切操作权限。

接受权限的用户可以是单个或多个具体的用户,若用PUBLIC参数,则可将权限赋给全体用户。

如果指定了WITH GRANT OPTION子句,则获得了权限的用户还可以将权限赋给其他用户。如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,但不能传播该权限。

授予对象权限的语句格式如下:

GRANT ﹛ALL︱对象权限1[,…,n]﹜

[ON <对象类型><对象名>]

TO <用户1>[,…,n]

[WITH GRANT OPTION];

其功能为将对制定操作对象的指定操作权限授予指定的用户。在SQL Server中书写语句时,对象类型可以省略不写。对象类型是指表、视图及存储过程等。

【例5-73】查询表student用户R1,写出相关语句。

解:GRANT SELECT ON student TO R1

【例5-74】把对表student和courses全部操作权限授予用户R2和R3,写出相关语句。

解:GRANT ALL PRIVILEGES ON student TO R2,R3

GRANT ALL PRIVILEGES ON course TO R2,R3

【例5-75】把对表enroll的查询权限授予所有用户,写出相关语句。

解:GRANT SELECT ON enroll TO PUBLIC

【例5-76】把查询表student和修改学生学号的权限授予用户R4,写出相关语句。

解:GRANT UPDATE(sno),SELECT ON student TO R4

【例5-77】把对表course的INSERT权限授予用户R5,并允许将此权限再授予其他用户,写出相关语句。

解:GRANT INSERT ON course TO R5 WITH GRANT OPTION

执行完该语句后,R5不仅拥有了对表course的INSERT权限,还可以传播此权限,也就是用户R5可以将上述INSERT权限授予其他用户。语句如下:

GRANT INSERT ON course TO R6 WITH GRANT OPTION

同理,R6可以将此权限授予R7。语句如下:

GRANT INSERT ON course TO R7

因为R6未将传播权限授予R7,故R7不能再传播此权限。