我有一个 SQL Server 2005 数据库,我尝试使用 Windows 身份验证以受限用户帐户的身份进行访问。我已将 BUILTIN\Users 添加为数据库用户(在这样做之前,我什至无法打开数据库)。我的工作假设是每个人都应该拥有应用于他们的“公共”角色的权限,所以我没有对角色分配进行任何操作。在 tblFoo 下,我可以使用 SSMS 属性对话框(权限页面)添加“public”,然后设置显式权限。其中包括 SELECT 的“Grant”。但跑步

SELECT * from tblFoo;

作为有限的(BUILTIN\Users)帐户给我一个错误“选择对象'tblFoo',数据库'bar',模式'dbo'的权限被拒绝”。在属性对话框中,有一个“有效权限”按钮,但它是灰色的。

此外,我尝试创建一个名为“UserTest”的非特权帐户,在服务器级别添加该帐户,然后将其映射到“bar”数据库。这让我将 UserTest 添加到“用户或角色”列表中,这让我可以为该帐户运行“有效权限”。根本没有列出任何权限——这似乎不对。该帐户必须是公开的,并且公共授予(除其他外)在 tblFoo 上选择,那么为什么 UserTest 帐户不显示有效权限呢?我觉得我在这里有点疯狂。

在旁边:我知道很多人不喜欢使用“公共”角色来设置权限。这只是我的修修补补时间;在最终设计中,我确信我们将拥有几个灵活的(自定义)数据库角色。我只是想弄清楚我看到的行为,所以请不要“不要那样做!”答案。

更新:显然,我对 SQL Server 的了解还不足以对我自己和他人造成危险。在设置权限时(正如我所说,“除其他外”),我有拒绝控制。当我设置此权限时,我想我尝试查找它做了什么,有一个模糊的想法,并决定拒绝。我目前不记得为什么这似乎是要做的事情,但这似乎就是我获得许可失败的原因。所以我更新我的问题:谁能解释“CONTROL”权限,因为它与表有关?

有帮助吗?

解决方案

您只需要拥有SELECT权限。在原始的SQL(看到你的对话框中的“脚本”图标/按钮),这是GRANT SELECT ON dbo.tblFoo to public。这是为了查看数据所需的唯一许可,

在这种情况下,该错误消息明确提到“拒绝”。 “DENY”本身就是一个合适的,所以它提到它,

如果你没有任何权利,你会得到的消息(非常近似)“tblFoo不存在,或者您没有权限”

“DENY CONTROL” 中提到此处。在这种情况下,你拒绝的所有的权利,公众的作用。

  

受让人有效地具有所有   上可保安全的定义的权限

其他提示

假设“UserTest”是域用户帐户,以 sysadmin 角色成员的身份连接并运行

EXEC MASTER.dbo.xp_logininfo 'Domain\UserTest', 'all'

(将“域”替换为您的域名)

这将显示 Windows 组等。该帐户正在继承安全权限和访问级别,例如你会期望看到类似的东西:

account name     type    privilege  mapped  login name       permission path
domain\usertest  user   user               domain\usertest  BUILTIN\Users

这将有助于解决帐户从何处继承权限的问题,例如它所属的 Windows 组有权访问数据库。如果这一切看起来都不错,那么我会听从你自己的建议,而不是扰乱公共角色。

  • 在数据库中创建数据库角色
  • 为该角色分配明确的权限
  • 为您的用户帐户创建服务器登录
  • 打开服务器登录,转到用户映射部分,单击数据库,然后选择您创建的数据库角色
scroll top