SQL Server db_owner

时间:2010-06-07 13:54:53

标签: sql-server security owner

在我的SQL2008中,我有一个位于“db_datareader”,“db_datawriter”和“db_ddladmin”数据库角色的用户,但是当他尝试使用SSMS修改表时,他收到一条消息说:

您未以数据库所有者或系统管理员身份登录。您可能无法保存对您不拥有的表的更改。

当然,我想避免这样的消息,但直到现在我确实找到了方法...... 因此,我尝试通过将用户添加到“db_owner”角色来修改用户,当然我没有上面的消息。

我的问题是:

  • 是否可以让用户保持“db_owner”角色,但是否认某些操作,例如alter user或?我尝试在数据库级别安全地“修改任何用户”,但它不起作用......

谢谢!

4 个答案:

答案 0 :(得分:1)

db_ddladmin固定数据库角色的成员可以在数据库中运行任何数据定义语言(DDL)命令。这可能只是来自SSMS的警告,尝试创建用户并尝试更改某些表

答案 1 :(得分:1)

我的理解一直是任何具有db_owner权限的用户都可以对数据库执行任何,包括删除它。当然,通过SQL 2005也是如此。我没有听到任何暗示这已经因SQL 2008而发生变化。

答案 2 :(得分:1)

如果用户是db_ddladmin的一部分,那应该不是问题。这只是warning

答案 3 :(得分:0)

这些确实是警告,我认为没有办法在SSMS中禁用那种警告。

在2008R2中,我看到的行为是具有“db_datareader”,“db_datawriter”和“db_ddladmin”的用户仍然需要被授予视图定义,以便能够通过右键单击并选择设计在SSMS中进行编辑。如果您未授予视图定义,则设计视图将以只读方式打开(带警告)。

请参阅:MSFT Connect Bug

对我而言,通过角色为ddladmin用户分配视图定义权限似乎更容易被发现,而不是按照Connect上的变通方法中的说明为特定用户帐户执行此操作。这将添加db_definitionviewer数据库角色:

USE <DB Name>;
CREATE ROLE db_definitionviewer;
GRANT VIEW DEFINITION TO db_definitionviewer;
EXEC sp_addrolemember 'db_definitionviewer', '<DOMAIN\group> | <DOMAIN\User>';