SQL Server扩展属性权限

时间:2014-01-30 10:02:32

标签: sql-server sql-server-2008 sql-server-2008-r2

我使用的是SQL Server 2008 R2,并且希望拥有一个用于数据库文档的用户。

此用户只能向所有数据库对象添加说明,例如数据库,表,视图和列。

我必须为此用户分配哪个权限?

我不希望为该用户分配db_ownerdb_ddladmin角色。

提前致谢。

2 个答案:

答案 0 :(得分:2)

因此,要向对象添加扩展属性,您需要拥有该对象或对该对象具有CONTROL或ALTER权限。

因此,您无法真正限制具有内置权限的用户仅添加扩展属性以在数据库上添加扩展属性,您必须向该用户授予该级别的所有者,控制权或更改权。 / p>

您可以做的是创建自己的存储过程来执行具有相同参数的系统存储过程,并将其设置为以所有者身份执行,然后将该过程的执行权授予用户。这样他们就不能在数据库中做任何事情,除了运行只添加扩展属性的程序。

我测试过以下内容并确实有效:

CREATE PROCEDURE add_property
(
@name NVARCHAR(128) = NULL,
@value NVARCHAR(128) = NULL,
@level0type NVARCHAR(128) = NULL,
@level0name NVARCHAR(128) = NULL,
@level1type NVARCHAR(128) = NULL,
@level1name NVARCHAR(128) = NULL,
@level2type NVARCHAR(128) = NULL,
@level2name NVARCHAR(128) = NULL
)
WITH EXECUTE AS OWNER
AS
EXEC sp_addextendedproperty 
@name, 
@value,
@level0type, 
@level0name,
@level1type, 
@level1name,
@level2type,
@level2name;

答案 1 :(得分:0)

无论您是否使用工具都无关紧要,能够添加用户对数据库具有修改权限所需的描述(查看您的收费文档):

系统存储过程sp_addextendedproperty,fn_listextendedproperties和sp_dropextendedproperty的EXEC权限。

来自msft网站:

For:sp_addextendedproperty

  

db_owner和db_ddladmin固定数据库角色的成员可以添加   扩展属性到任何对象,但有以下异常:   db_ddladmin无法向数据库本身或用户添加属性   或角色。用户可以将扩展属性添加到他们拥有的对象或   拥有ALTER或CONTROL权限。

For:sp_dropextendedproperty

  

db_owner和db_ddladmin固定数据库角色的成员可能会丢弃   任何对象的扩展属性。用户可以删除扩展属性   他们拥有的对象。但是,只有db_owner可能会将属性删除   用户名。

希望这有帮助