sql server 2005用户权限设置深入分析

2020-07-06 05:54:03易采站长站整理

接着,切换回TestAccount连接(要记住,以什么用户进行连接的信息显示在连接窗口的标题栏中),然后,再尝试执行SELECT语句:这一次,得到了好得多的结果:
我们继续尝试另外的语句。这一次,我们在EmployeeTerritories表上运行相同的测试和命令:
该语句执行失败——这同样是由于你不具备相应的权限所致,因此,授予用户该表上的权限:
然后,再次运行SELECT语句,一切进展顺利:
不过,若要再添加一点变化,尝试在这个表中执行INSERT:
SQL Server立即会让我们走开——我们不具备必要的权限,因此,授予用户相应的权限(使用sa连接):
现在,再次运行INSERT语句:
一切进展顺利。
2.DENY
DENY明确阻止用户获得目标对象上指定的访问 权限。DENY的关键所在是,它将覆盖任何GRANT语句。由于用户可以属于多个角色(马上将对此进行讨论),因此,一个用户可能属于被授予了访问权限的 角色,但同时又受DENY的影响。如果用户个人的权限和基于角色成员身份所获得的权限混合在一起,DENY和GRANT同时存在于其中,那么DENY总是 优先的。简言之,如果用户或用户所属的任何角色在权限问题上有DENY出现,则用户将不能使用在那个对象上的访问权限。
其语法很复杂繁多,看上去与GRANT语句一样:
DENY
ALL [PRIVILEGES]|<权限>[,…n]
ON
<表名或视图名>[(列名[,…n])]
|<存储过程或扩展存储过程名>
TO <登录ID或角色名>[,…n]
[CASCADE]
同样,ALL关键字表明,想要拒绝授予该对象类型上所有可用的权限(EXECUTE绝不适用于表)。如果不使用ALL关键字,则需要提供一个或多个具体的权限,这些具体的权限是针对想要拒绝授予权限的对象的。
PRIVILEGES依然是新关键字,并且,除了提供ANSI-92兼容性外没有任何实际的功能。
ON关键字用作一个占位符,以说明接下来的是想要拒绝授予其权限的对象。
到此为止,所有的事情都与GRANT语句几乎一样。 CASCADE关键字与GRANT语句中的WITH GRANT OPTION相对应。CASCADE告诉SQL Server,如果用户在WITH GRANT OPTION规则下授予了其他人访问权限,则对于所有这些人,也拒绝他们的访问。
为了在DENY上运行一个例子,我们使用TestAccount登录名尝试执行一个简单的SELECT语句:
运行该语句后,将返回大约9条记录。在我们不曾授予TestAccount该权限时,它是如何获得访问权限的呢?原因是,TestAccount属于Public,而Public被授予了Employees上的访问权限。
假如我们不希望TestAccount能够访问Employees。无论什么原因,TestAccount是一个例外,并且我们不希望该用户查看那些数据——我们只需发出DENY语句(记住要使用sa登录名来运行DENY):
相关文章 大家在看