0

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

SELECT * from tblFoo;

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

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

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

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

4

2 回答 2

1

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

在这种情况下,错误消息明确提到“拒绝”。“拒绝”本身就是一项权利,所以它提到了它,

如果您没有权利,您将收到消息(非常近似)“tblFoo 不存在或您没有权利”

这里提到了“拒绝控制” 。在这种情况下,您拒绝了公共角色的所有权利。

被授权者实际上拥有对安全对象的所有已定义权限

于 2008-12-16T05:02:16.333 回答
0

假设“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 组对数据库具有权限。如果这一切看起来都不错,那么我会听从你自己的建议,而不是搞乱公共角色。

  • 在您的数据库中创建数据库角色
  • 为该角色分配显式权限
  • 为您的用户帐户创建服务器登录
  • 打开服务器登录,进入用户映射部分,点击数据库并选择你创建的数据库角色
于 2008-12-16T00:00:29.623 回答