Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server扩展属性权限_Sql Server_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql server SQL Server扩展属性权限

Sql server SQL Server扩展属性权限,sql-server,sql-server-2008,sql-server-2008-r2,Sql Server,Sql Server 2008,Sql Server 2008 R2,我使用SQL Server 2008 R2,并希望有一个数据库文档用户 此用户只能向所有数据库对象(如数据库、表、视图和列)添加说明 我必须为该用户分配哪个权限 我不想将db_owner或db_ddladmin角色分配给该用户 提前感谢。因此,要向对象添加扩展属性,您需要拥有该对象,或者拥有该对象的控制或更改权限 因此,您不能真正限制具有内置权限的用户仅添加扩展属性。要在数据库上添加扩展属性,您必须在该级别向用户授予所有者、控制权或更改权 不过,您可以创建自己的存储过程,以使用相同的参数执行系统

我使用SQL Server 2008 R2,并希望有一个数据库文档用户

此用户只能向所有数据库对象(如数据库、表、视图和列)添加说明

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

我不想将
db_owner
db_ddladmin
角色分配给该用户


提前感谢。

因此,要向对象添加扩展属性,您需要拥有该对象,或者拥有该对象的控制或更改权限

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

不过,您可以创建自己的存储过程,以使用相同的参数执行系统存储过程,并将其设置为以所有者身份执行,然后将该过程上的execute授予用户。这样,除了运行只添加扩展属性的过程之外,他们无法在数据库中执行任何操作

我已经测试了以下各项,它确实有效:

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;

无论是否使用工具,都可以添加用户对数据库具有修改权限所需的描述(请查看工具的文档):

系统存储过程sp_addextendedproperty、fn_listedxtendedproperties和sp_dropextendedproperty的EXEC权限

从msft网站:

用于:

db_所有者和db_ddladmin固定数据库角色的成员可以添加 将属性扩展到任何对象,但以下情况除外: db_ddladmin无法向数据库本身或用户添加属性 或者角色。用户可以将扩展属性添加到他们拥有的对象或 对具有更改或控制权限

用于:

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


希望这个问题对你有所帮助,但我更适合感谢你。但我使用诸如Redgate SQL Doc 2和SQL Spec之类的数据库文档工具,不能使用存储过程来限制我的用户。