SQL Server 2005“公共”数据库角色似乎不适用?

时间:2008-12-15 23:07:41

标签: sql-server permissions controls account

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

SELECT * from tblFoo;

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

提到“DENY CONTROL”here。在这种情况下,您拒绝对公共角色的所有权限。

  

受让人实际上拥有所有   对安全性

的已定义权限

答案 1 :(得分: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组是其中一部分具有数据库权限。如果这一切看起来都不错,那么我会按照你自己的建议,而不是搞乱公共角色。

  • 在您的帐户中创建数据库角色 数据库
  • 为此分配显式权限 作用
  • 为您的用户创建服务器登录 帐户
  • 打开服务器登录,转到 用户映射部分,单击 数据库并选择数据库 你创建的角色
相关问题