DBMS大都采用自主存取控制保证数据库数据的安全性。通过授权(authority)使不同的用户对不同的数据对象有不同的存取权限。SQL
Server中的权限分为语句权限和对象权限。 授予权限(GRANT)是指允许具有特定权限的用户有选择地、动态地把某些权限授予其他用户,必要时还可以收回这些权限。 授予用户权限的语句格式如下: GRANT 权限表 ON 操作对象 TO {用户1[,用户2]…..|PUBLIC} [ WITH GRANT OPTION ] 参数说明: ALL: 指定对象的所有权限授予用户。 PUBLIC: 将指定的权限授予所有用户。 WITH GRANT OPTION:它使得被授权的用户具有授权权限,即被授权的用户有权力将得到的指定权限再授予其他用户。 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 ] 例1,下面的示例给用户 Mary 和 John 以及 Windows NT 组 Corporate\BobJ 授予产生数据库和表的语句权限,如下描述: GRANT CREATE DATABASE, CREATE TABLE TO Mary, John, [Corporate\BobJ] 例2,将在数据库pubs上创建表、视图的权限授予用户'张力' USE pubs GO GRANT CREATE VIEW , CREATE TABLE TO 张力 2. 对象权限 对象权限是指数据库对象创建以后,通常只有创建它的拥有者才可以访问该对象。拥有者可以把对象的访问权限授予其他的合法的数据库用户,其他用户才能访问该数据库对象,这种权限称为对象权限。 对象权限是指对表、视图、用户定义函数和存储过程等的操作权限。 当在表或视图上授予对象权限时,对象权限列表可以包括下列这些权限中的一个或多个操作:SELECT、INSERT、DELETE、 UPDATE 、REFENENCES 或 ALL。 在存储过程上授予的对象权限只可以包括执行存储过程权限 EXECUTE。 在标量值函数上授予的对象权限可以包括 EXECUTE 和 REFERENCES。 授予对象权限的语句格式如下: GRANT { ALL |对象权限1 [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } TO 用户1 [ ,...n ] [ WITH GRANT OPTION ] 例1,把对表student的所有操作权授予用户'张力',如下描述: GRANT ALL ON student TO 张力; 例2,只把对表 couse 的只读访问权授予用户'王红',同时允许王红把此权限授予其他人: GRANT SELECT ON couse TO 王红 WITH GRANT OPTION ; 例3,王红可再把此权限授予他人,如李立,李立无权将他得到的权限再授予其他人。 GRANT SELECT ON couse TO 李立 例4,下例显示权限的优先顺序。首先给public 角色授予 SELECT 权限。然后,将特定的权限授予用户 Mary、John 和 Tom。于是这些用户就有了对 authors 表的所有权限,如下描述: USE pubs GO GRANT SELECT ON authors TO public GO GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom GO 在数据库内部,SQL Server提供了权限作为访问权设置的最后一道关卡。当数据库对象刚刚创建完成,只有拥有者可以访问该数据库对象。任何其他用户想访问该对象必须首先获得拥有者赋予他们的权限。拥有者可以授权给指定的数据库用户,这种权限被称为对象权限。 例5,将对表dept的INSERT,UPDATE,DELETE权限授予用户'张力',如下描述: GRANT INSERT, UPDATE, DELETE ON dept TO 张力 权限只能授予本数据库的用户,或者获准访问本数据库的其他数据库的用户。如果将权限授予了public角色,则所有数据库里面的所有用户都将默认为获得了该项权限。如果将权限授予了guest用户,则所有可以连接上服务器的用户都默认获得了该项权限。 |