我想使用sql login在包含的数据库中脚本出数据库用户。我正在使用以下查询,但它仅创建数据库用户,而不创建带有密码的sql登录。是否可以在加密输出中编写密码脚本,以便我可以正确还原它?
SELECT '-- [-- DB USERS --] --' AS [-- SQL STATEMENTS --], 3 AS [-- RESULT ORDER HOLDER --]
UNION SELECT 'IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = ' + SPACE(1) + '''' + [name] + '''' + ')
BEGIN CREATE USER ' + SPACE(1) + QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name]) + ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name]) + SPACE(1) + 'END; ' AS [-- SQL STATEMENTS --], 4 AS [-- RESULT ORDER HOLDER --] FROM sys.database_principals AS rm
WHERE [type] IN ('U', 'S', 'G') -- windows users, sql users, windows groups
结果
IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] ='DJlogin') BEGIN CREATE USER [DJlogin] FOR LOGIN [DJlogin] WITH DEFAULT_SCHEMA = [dbo] END;
答案 0 :(得分:1)
我想使用以下命令在包含的数据库中编写数据库用户的脚本 sql登录
包含数据库的中心思想是它们可以可移动,因此此类数据库的数据库主体(或用户)不映射到实例级登录名,因为它们是独立的并且其范围是“包含数据库”
因此,可以通过这种数据库的简单备份/还原或附加/分离将这些用户与数据库一起移动到另一个实例/服务器。当然,新实例应该启用了对此类数据库的支持。
如果数据库主体确实连接到实例级别登录名,则可以通过著名的How to transfer logins and passwords between instances of SQL Server
编写脚本。