问题描述
用户对数据的库的访问以及对数据库对象的操作都体现在权限上,具有什么样的权限,就能执行什么样的操作。权限对于数据库来说至关重要,它是访问权限设置中的最后一道安全措施,管理好权限是保证数据库安全的必要因素。
解决方案
在SQL Server中按照权限是否进行预定义,可以把权限分为预定义权限和自定义权限;按照权限是否与特定的对象有关,可以分为针对所有对象的权限和针对特殊对象的权限。
1)预定义和自定义权限
所谓预定义权限是在安装SQL Server过程完成之后,不必通过授予即拥有的权限。例如服务器角色和数据库角色就属于预定义权限,对象的所有者也拥有该对象的所有权限以及该对象所包含对象的所有权限。
自定义的权限是指需要经过授权或继承才能得到的权限,大多数的安全主体都需要经过授权才能获得对安全对象的使用权限。
2)所有对象和特殊对象的权限
针对所有对象的权限表示将针对SQL Server中的所有对象(例如CONTROL权限)都有的权限。针对特殊对象的权限是指某些权限只能在指定的对象上起作用。例如,INSERT仅可以用于表的权限,不可以是存储过程的权限;而EXECUTE只可以是存储过程的权限,不能作为表的权限等。
对于表和视图,拥有者可以授予数据库用户INSERT、UPDATE、DELETE、SELECT和REFERENCES共五种权限。在数据库用户要对表执行相应的操作之前,必须事先获得相应的操作权限。例如,如果用户想浏览表中的数据,首先必须获得拥有者授予的SELECT权限。
下表是一些常用的权限:
数据库 |
CREATE DATABASE、CREARE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE VIEW、CREATE TABLE、CREATE RULE、BACKUP DATABASE、BACKUP LOG |
表 |
SELECT、DELETE、INSERT、 UPDATE、REFERENCS |
值 |
SELECT、DELETE、INSERT、 UPDATE、REFERENCS |
视图 |
SELECT、DELETE、INSERT、 UPDATE、REFERENCS |
过程 |
EXECUTE、SYNONYM |
表1-1 常用权限
对于权限的操作有:授予权限、撤销权限、拒绝权限。通过名字我们都不难理解每个操作的意义。接下来,我们具体看看每个权限的具体操作。
授予权限
Grant {all|statement[权限名]} To security_account[用户名] |
撤销权限
Revoke{all|statement[权限名]} From security_account[用户名] |
拒绝权限
Deny {all|statement[权限名]} To security_account[用户名] |
* 拒绝权限只是在不收回用户权限前提下,禁止用户访问数据库中某对象的的一个操作。