我有一個存儲過程,可以查找所有現有數據庫並從每個表中讀取數據。SQL Server - 爲所有現有和未來數據庫提供讀取訪問的登錄權限
有沒有一種方法可以讓所有數據庫的登錄讀取權限,以及所有未來的數據庫,即添加新數據庫時不需要做任何事情?
有沒有可以工作的服務器角色?有沒有辦法讓SQL代理作業添加任何新數據庫的權限?或者還有其他一些方法嗎?
我有一個存儲過程,可以查找所有現有數據庫並從每個表中讀取數據。SQL Server - 爲所有現有和未來數據庫提供讀取訪問的登錄權限
有沒有一種方法可以讓所有數據庫的登錄讀取權限,以及所有未來的數據庫,即添加新數據庫時不需要做任何事情?
有沒有可以工作的服務器角色?有沒有辦法讓SQL代理作業添加任何新數據庫的權限?或者還有其他一些方法嗎?
對於新數據庫,請將用戶添加到模型數據庫中。這用作所有新數據庫的模板。
USE model
CREATE USER ... FROM LOGIN...
EXEC sp_addrolemember 'db_datareader', '...'
對於現有的數據庫,使用sp_MSForEachDb
EXEC sp_MSForEachDb '
USE ?
CREATE USER ... FROM LOGIN...
EXEC sp_addrolemember ''db_datareader'', ''...''
'
USE [主] GO --IF NOT EXISTS(SELECT * FROM syslogins中,其中登錄名= '與登錄名替換') - CREATE LOGIN [與登錄名替換]從與DEFAULT_DATABASE = [主] --GO DECLARE @SQL VARCHAR(MAX) DECLARE @DatabaseName VARCHAR(255)
WINDOWSDECLARE crFetch CURSOR FOR --Select NAME FROM SYSDATABASES WHERE名稱在 - ( '主', '模型', 'tempdb的', 'msdb中', '分配')
SELECT NAME FROM SYS。DATABASES WHERE名稱不 ( '大師', '模型', 'tempdb數據庫', 'msdb中', '分配')
OPEN crFetch FETCH NEXT FROM crFetch INTO @DatabaseName
WHILE @@ FETCH_STATUS < > -1 BEGIN
SET @SQL =
'USE [' + @DatabaseName + ']' + '如果不存在(從選擇的sysusers name其中name =' + '' '' +'替換爲登錄名'+''''+')'+ 'CREATE USER [r用登錄名替換]用登錄名[用登錄名替換]'+ 'EXEC sp_addrolemember''''''''''''+',''+''''' '+''''+' '
- 'EXEC sp_addrolemember N'+''''+'db_datareader'+''''+',N'+''''+'替換爲登錄名'+''''+ ''如果不存在(從sysusers中選擇名稱,其中name ='+''''+'db_executor'+''''+'和issqlrole = 1)'+ - -'create ROLE db_executor'+''+ - 'GRANT EXECUTE TO db_executor'+''+ - 'EXEC sp_addrolemember N'+''''+'db_executor'+''''+',N' +''''+'替換爲登錄名'+'''''+'
--print @SQL
EXEC(@SQL)
NEXT來去crFetch INTO @DatabaseName END
CLOSE crFetch DEALLOCATE crFetch
用戶自動獲得運行後讀訪問? – Greg 2010-08-23 18:40:20
那麼,你也需要授予一些權利,但他們將有數據庫訪問 – gbn 2010-08-23 18:42:57
如何自動授予表的讀權限?否則,我回到了我開始的地方。 – Greg 2010-08-23 18:48:11