2014-01-28 24 views
0

我需要爲SQL數據庫中的所有函數授予用戶權限。我需要把它安排爲每天恢復的數據庫的工作。允許用戶列出功能的腳本。

恢復後,用戶需要獲得對該功能的「選擇」權限。以下是手動執行此操作的屏幕截圖。 http://screencast.com/t/H3jw6Odrk

如何爲所有功能腳本此操作。以下是獲取該數據庫中所有功能的腳本。誰可以告訴我的命令循環通過此功能,並授予「選擇權限,好嗎?

感謝您的時間..

USE DBNAME; 
GO 
SELECT name AS function_name 
,SCHEMA_NAME(schema_id) AS schema_name 
,type_desc 
FROM sys.objects 
WHERE type_desc LIKE '%FUNCTION%' 
order by type_desc; 
GO 
+0

屏幕頂部有一個框,上面寫着「腳本」 - 它會生成一個腳本來應用您選擇的值。這有幫助嗎? –

回答

1

我知道這可能不是最好的解決辦法,但一個方式來實現這是使用一個光標。只是把這個代碼放到你的工作中,這個工作將在數據庫恢復和你的工作完成後運行請注意,這段代碼實際上並不是GRANT權限,但只打印出GRANT聲明,你需要驗證它是你想要的,比註釋掉PRINT行並取消註釋EXEC row。

DECLARE @function_name NVARCHAR(250); 

DECLARE fun_cursor CURSOR 
FOR 
    SELECT SCHEMA_NAME(schema_id) + '.' + name 
     FROM sys.objects 
     WHERE type_desc LIKE '%FUNCTION%' 

OPEN fun_cursor 

FETCH NEXT FROM fun_cursor 
INTO @function_name 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     PRINT 'GRANT SELECT ON ' + @function_name + ' TO MYUSER' --Used for debugging 
     --EXEC sp_executesql N'GRANT SELECT ON @function_name TO MYUSER',@function_name 
FETCH NEXT FROM fun_cursor 
INTO @function_name 
    END 

CLOSE fun_cursor; 
DEALLOCATE fun_cursor; 

注:以人可能關注:請不要評論爲什麼光標是壞的,而不是提供自己的答案一個替代解決方案。

+0

遊標確實不好,但他們在那裏有一個原因:你有時需要它們。 –