2008-12-15 71 views
0

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

SELECT * from tblFoo; 

为有限(BUILTIN \用户)帐户给我一个错误“的对象tblFoo'数据库‘酒吧’,架构‘DBO’拒绝选择权限”。在属性对话框中,有一个“有效权限”按钮,但它是灰色的。

此外,我尝试创建一个名为“UserTest”的非专用帐户,在服务器级别添加,然后将其映射到“ bar“数据库,这让我可以将UserTest添加到”Users or Roles“列表中,该列表允许我为该帐户运行”Effective Permissions“,根本没有列出任何权限 - 这看起来不正确。公共和公共津贴(除其他外)在tblFoo上选择,为什么UserTest帐户不显示有效的权限?我觉得我在这里有点疯狂。人们不喜欢使用“公共”角色来设置权限,这只是我的修补时间;在最终设计中,我确信我们会拥有几个灵活的(自定义)数据库角色。我只是想弄清楚我看到的行为,所以请不要“不要那样做!”答案。

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

回答

1

您只需要有SELECT权限。在原始SQL中(请参阅对话框中的“脚本”图标/按钮),它是GRANT SELECT ON dbo.tblFoo to public。这是查看数据所需的唯一权限,在这种情况下,错误消息明确提到“拒绝”。 “拒绝”本身就是一种权利,所以提到它,

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

“DENY CONTROL”被提及here。在这种情况下,您拒绝全部权利的公共角色。

受让人有效地对安全对象

+0

确定所有 定义的权限,所以仅仅是明确的: *如果我授权控制,他们可以与表 *如果我否认做任何事控制,他们被禁止与表 *因此,如果我想选择性地授予或拒绝其他权限(更新,插入等),我应该REVOKE控制 是吗? – Coderer 2008-12-16 17:39:48

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组是对数据库有权限的组成部分。如果这一切都看起来不错,那么我会遵循你自己的建议,而不是惹恼公众角色。

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