
[英]Search for a string in all databases, all columns, and all tables (SQL Server 2008 R2)
[英]Altering all the users of all the databases in MS SQL Server 2008 R2
我目前正在尝试对 SQL 服务器的所有数据库的所有用户应用ALTER
命令。 我的方法是使用游标,一个循环遍历每个数据库,另一个循环遍历每个数据库的所有用户。
我使用了以下代码结构
DECLARE @db VARCHAR(256) -- DB name
DECLARE @user VARCHAR(256) -- Username
-- Selecting all the databases
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' -- Database ' + @db
EXEC ('USE ' + @db)
-- Selecting all the users of the current database
DECLARE user_cursor CURSOR FOR SELECT name FROM MASTER.sys.database_principals WHERE type NOT IN ('R', 'X')
OPEN user_cursor
FETCH NEXT FROM user_cursor INTO @user
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' -- User : ' + @user
FETCH NEXT FROM user_cursor INTO @user
END
CLOSE user_cursor
DEALLOCATE user_cursor
FETCH NEXT FROM db_cursor INTO @db
END
CLOSE db_cursor
DEALLOCATE db_cursor
完整的代码是:
DECLARE @db VARCHAR(256) -- DB name
DECLARE @user VARCHAR(256) -- Username
DECLARE db_cursor CURSOR FOR
SELECT name FROM MASTER.sys.databases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' -- Database ' + @db
DECLARE user_cursor CURSOR FOR
SELECT name FROM MASTER.sys.database_principals
WHERE type NOT IN ('R', 'X')
AND sid is not null
and name != 'guest'
OPEN user_cursor
FETCH NEXT FROM user_cursor INTO @user
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' -- User : ' + @user
SELECT 'ALTER ROLE [' + roles.name + '] ADD MEMBER [' + users.name + '];'
from sys.database_principals users
inner join sys.database_role_members link
on link.member_principal_id = users.principal_id
inner join sys.database_principals roles
on roles.principal_id = link.role_principal_id
where users.name = @user
FETCH NEXT FROM user_cursor INTO @user
END
CLOSE user_cursor
DEALLOCATE user_cursor
FETCH NEXT FROM db_cursor INTO @db
END
CLOSE db_cursor
DEALLOCATE db_cursor
目标是通过将ALTER
的所有用户分配给他们适当的角色来改变他们
问题是并非所有用户都可以访问。 用户属于 AD 组。
先感谢您
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.