在SQL Server中授予某个Schema的权限时,我想拒绝某些用户的某些操作。 我是否必须明确否认这些,或者是否当用户获得这个模式的权限时,这个模式的权限被自动拒绝给其他用户?
默认情况下,架构中对象的权限不会授予用户。 但是,用户可以通过几种方式获得对象的权利。 例如,可以将权限明确地授予用户和/或用户所属的组。
即使用户被授予对象的权限, DENY命令也会拒绝用户或组的权限。 例如,假设用户A是MyGroup组的成员,并且该组已被授予访问MyTable表的权限。 MyGroup中的所有用户都可以查询MyTable。 现在,您可以拒绝用户A访问MyTable。用户A将无法查询MyTable,但其余组成员仍然可以查询该表。
因此,最好明确地拒绝不应该访问模式的用户的权利。
把SQL中的Schema看作一棵树。 进一步回到用户拥有权限的模式的根,进一步向上的树干和分支用户将保持,直到你否认它。 如果用户A有权执行数据库上存储的特效,那么他们有权访问该数据库中所有存储的特效,如果你不希望他们有权运行一个单独的,你必须将其标记为拒绝。 读,写,更新等权限也一样。 如果用户拥有更高级别的权利,那么您需要隐式拒绝。 我想不出任何(包括login)用户有权做的事情,除非你首先授予他们访问权限。 记住当然,其中一些可以在用户创build时被授予。
我要说的最后一件事情就是,它永远不会伤害。 我会经常指定允许或拒绝对安全性更敏感的项目,即使我知道它应该已经是这样了。