2014-01-30 86 views
5

我使用SQL Server 2008 R2並希望爲用戶提供數據庫文檔。SQL Server擴展屬性權限

此用戶只能將描述添加到所有數據庫對象,如數據庫,表,視圖和列。

我必須爲此用戶分配哪個權限?

我不想將db_owner或​​角色分配給該用戶。

在此先感謝。

+0

有趣的問題,但恕我直言更適合http://dba.stackexchange.com/ –

回答

1

因此,要將擴展屬性添加到對象,您需要擁有該對象或對對象具有CONTROL或ALTER權限。

因此,您不能真正限制用戶使用內置權限添加擴展屬性來添加數據庫的擴展屬性,您必須將該級別的所有者,控制權或更改權授予用戶。

雖然你可以做的是創建你自己的存儲過程,以相同的參數執行系統存儲過程,並將其設置爲作爲所有者執行,然後只需將該過程的執行權授予用戶。這樣,除了運行只添加擴展屬性的過程之外,他們無法在數據庫中執行任何操作。

我已經測試了以下和它的工作:

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; 
+0

感謝。但我使用數據庫文檔工具,如Redgate SQL Doc 2和SQL Spec。並且不能使用存儲過程來限制我的用戶。 –

0

,如果你使用的工具或不不要緊,才能夠添加用戶需要擁有修改權限的說明數據庫(查看您的收費文檔):

對系統存儲過程執行權限sp_addextendedproperty,fn_listextendedproperties和sp_dropextendedproperty。

從MSFT網站:

爲:db_owner和db_ddladmin固定數據庫角色可以有以下例外添加 擴展屬性在任何物體的sp_addextendedproperty

成員: db_ddladmin不能屬性添加到數據庫本身或用戶 或角色。用戶可以將擴展屬性添加到他們擁有的對象或 具有ALTER或CONTROL權限。

對於:的db_owner的sp_dropextendedproperty

成員和db_ddladmin固定數據庫角色可以除去任何對象的 擴展屬性。用戶可以將擴展屬性 刪除到他們擁有的對象。但是,只有db_owner可以將屬性刪除到 用戶名。

希望這有助於