日期:2014-04-01  浏览次数:20595 次

还有其它值得提到的新特性吗?

我们还增加了DENY语句,可以被管理员用来禁止某个用户对一个对象的所有访问权限。在SQL


Server 6.5中你可以在一行上运行两次REVOKE语句来在某种程度上仿效DENY语句。

在SQL Server 7.0中,如果你想阻止某人查看某一个表,你可以使用DENY来禁止他的SELECT权限。使用DENY语句时应当非常小心。举个例子:假如你在AUTHORS表上有SELECT和INSERT的权限,而且作为某个NT组的成员,你还拥有UPDATE权限。然而,你所在的另一个NT组被DENY语句禁止了INSERT和UPDATE权限。结果是,你只有SELECT权限了。DENY语句会禁止对数据库对象的访问,因此你要确保没有对PUBLIC组使用DENY语句,因为任何用户都总是PUBLIC组中的成员。许多没有经验的管理员这样做了,然后他们只好打电话来向我们求助。

DENY不仅可以用于数据库对象,它还可以用于登录名。例如,你授予了NT组“domain
users”登录到SQL Server的权限。Joe刚刚被解雇了但是他还不知道。你不能简单地使用REVOKE语句来取消Joe的登录权限,因为他没有被单独授予登录权限,而是和其他成员一起作为“domain
users”组中的一个成员被一起授予登录权限。这时你就可以特别地对Joe使用DENY语句。这样他不能登录到SQL
Server了,而同一个组的其他成员仍然可以。

应用程序角色是如何工作的?

可能解释应用程序角色的最好方式是在实际情况中说明。比方说你想做一个职工工资单的应用程序,可以允许用户更新工资。当然你不希望允许用户简单地登录到SQL
Server中然后更改工资。如果雇员能够那样做的话,他就可能试图去更改他自己的工资了。更合适的方法是使用一个工资单应用程序,它能够执行特定的安全检查,例如,不允许用户更新他们自己的工资。

它是这样工作的。你的工资单应用程序以使用者的安全级别登录到SQL
Server,以便服务器审计追踪工具能够知道到底是谁在登录到SQL Server。然后你的应用程序切换到适当的数据库并调用系统存储过程“sp_setapprole”来启动应用程序角色。应用程序角色是受密码保护的,所以你需要把密码作为参数传递给sp_setapprole。当数据在网上传输时,你也可以对密码进行加密。

一旦启动了应用程序角色,用户现有的权限被关闭,应用程序角色的安全权限被相应打开。你的应用程序现在就可以使用应用程序角色来执行修改数据库的操作了。

需要注意的一个问题是,应用程序角色是特定于连接的。假如你同时打开了两个到SQL
Server的连接,你必须保证每个连接的应用程序角色都被打开了。使用应用程序角色时,一旦打开连接并转换到适当的数据库后,第一件事情就是调用“sp_setapprole”存储过程。如果不启动应用程序角色,你就不能够访问任何应用程序角色所专有的数据。