如何将默认数据库更改为所有登录名?
How to change default database to all logins?
我对 SQL 有点陌生,我正在尝试编写 SQL post 安装活动的脚本,但我在更改登录时遇到了一些困难。公司政策规定 none 登录名应默认使用 master
数据库,因此我的计划是确定所有默认使用 master
的登录名并将 master
更改为 tempdb
.
可以使用这样的查询更改单一登录:
ALTER LOGIN [sa] WITH DEFAULT_DATABASE = tempdb
尝试在所有登录上实现这一点(不知道他们的数量或名称),我知道我很天真,希望这样的事情会起作用(但不得不尝试):
UPDATE master..syslogins
SET dbname = 'tempdb'
WHERE dbname = 'master'
显然输出错误(听起来合乎逻辑):
Ad hoc updates to system catalogs are not allowed.
SQLs 处于 MIX 身份验证模式,所以几乎任何东西都可以登录 - SQL 登录,Windows 本地或域用户或组(不确定这是否可以使解决方案的任何差异)。解决方案应该与版本无关,但假设从 SQL 2005 年开始(...是的,仍然有一些古老的版本...)
任何人都可以帮我找到合适的查询来实现这个吗?
提前感谢您的任何提示
DECLARE @LoginName SYSNAME;
DECLARE @Sql NVARCHAR(MAX);
DECLARE Cur CURSOR FOR
SELECT loginname
FROM sys.syslogins
WHERE name NOT LIKE '%#%'
AND name <> 'SA'
-- AND --<-- here add more clauses to target the desired logins only
OPEN Cur
FETCH NEXT FROM Cur INTO @LoginName
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @Sql = N'ALTER LOGIN ' + QUOTENAME(@LoginName)
+ N' WITH DEFAULT_DATABASE = [tempdb];'
-- PRINT @SQL --<-- test before you actually execute it
EXEC (@SQL)
FETCH NEXT FROM Cur INTO @LoginName
END
CLOSE Cur;
DEALLOCATE Cur;
我对 SQL 有点陌生,我正在尝试编写 SQL post 安装活动的脚本,但我在更改登录时遇到了一些困难。公司政策规定 none 登录名应默认使用 master
数据库,因此我的计划是确定所有默认使用 master
的登录名并将 master
更改为 tempdb
.
可以使用这样的查询更改单一登录:
ALTER LOGIN [sa] WITH DEFAULT_DATABASE = tempdb
尝试在所有登录上实现这一点(不知道他们的数量或名称),我知道我很天真,希望这样的事情会起作用(但不得不尝试):
UPDATE master..syslogins
SET dbname = 'tempdb'
WHERE dbname = 'master'
显然输出错误(听起来合乎逻辑):
Ad hoc updates to system catalogs are not allowed.
SQLs 处于 MIX 身份验证模式,所以几乎任何东西都可以登录 - SQL 登录,Windows 本地或域用户或组(不确定这是否可以使解决方案的任何差异)。解决方案应该与版本无关,但假设从 SQL 2005 年开始(...是的,仍然有一些古老的版本...)
任何人都可以帮我找到合适的查询来实现这个吗?
提前感谢您的任何提示
DECLARE @LoginName SYSNAME;
DECLARE @Sql NVARCHAR(MAX);
DECLARE Cur CURSOR FOR
SELECT loginname
FROM sys.syslogins
WHERE name NOT LIKE '%#%'
AND name <> 'SA'
-- AND --<-- here add more clauses to target the desired logins only
OPEN Cur
FETCH NEXT FROM Cur INTO @LoginName
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @Sql = N'ALTER LOGIN ' + QUOTENAME(@LoginName)
+ N' WITH DEFAULT_DATABASE = [tempdb];'
-- PRINT @SQL --<-- test before you actually execute it
EXEC (@SQL)
FETCH NEXT FROM Cur INTO @LoginName
END
CLOSE Cur;
DEALLOCATE Cur;