我有一个存储过程,可以查找所有现有数据库并从每个表中读取数据。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