【问题标题】:SQL Server 2005 "public" database role doesn't seem to apply?SQL Server 2005“公共”数据库角色似乎不适用?
【发布时间】:2010-09-27 01:38:50
【问题描述】:

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

【问题讨论】:

    标签: sql-server permissions controls account


    【解决方案1】:

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

    • 在您的 数据库
    • 为此分配明确的权限 角色
    • 为您的用户创建服务器登录 帐号
    • 打开服务器登录,进入 用户映射部分,单击 数据库并选择数据库 您创建的角色

    【讨论】:

      【解决方案2】:

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

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

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

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

      受赠者实际上拥有所有 对安全对象的定义权限

      【讨论】:

      • 好的,所以要明确一点:* 如果我授予控制权,他们可以对表格做任何事情 * 如果我拒绝控制,他们被禁止对表格做任何事情 * 所以如果我想选择性地 GRANT 或 DENY 其他权限(更新、插入等),我应该 REVOKE 控制权是吗?
      • 是的。 REVOKE 删除 GRANT 或 DENY(这是明确的)。但是,您通常只需 GRANT 组合 SELECT、INSERT、UPDATE、DELETE 或 EXEC ......这对于 99% 以上的应用程序来说已经足够了。 CONTROL 授予太多权限(例如更改表或更改安全性)。
      猜你喜欢
      • 2011-02-17
      • 2010-09-29
      • 2011-03-26
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多