包含資料庫(Contained Database): 作用是這個資料庫的創建的用戶不需要再指定登陸名就可以連接訪問。 優點:資料庫在異地恢愎時,不需要再創建登陸名。即遷移的時候不再需要在新實例上添加登陸名。(PS:Alawayson 沒有同步登陸名和作業。這個可以解決登陸名的問題) 缺點:只能訪問自 ...
包含資料庫(Contained Database): 作用是這個資料庫的創建的用戶不需要再指定登陸名就可以連接訪問。
優點:資料庫在異地恢愎時,不需要再創建登陸名。即遷移的時候不再需要在新實例上添加登陸名。(PS:Alawayson 沒有同步登陸名和作業。這個可以解決登陸名的問題)
缺點:只能訪問自身資料庫,並不能訪問同一實例上的其他資料庫。(PS:博主未能訪問成功,不是肯定不能訪問)
使用步驟:
實例支持:
EXEC sys.sp_configure N'contained database authentication', N'1' GO RECONFIGURE WITH OVERRIDE GO
新建或修改資料庫的包含類型為部份。
Create Database DBName Containment=partial
Alter DataBase DBName set Containment=partial
當修改資料庫時,還需要將映射到 SQL Server 登錄名的資料庫用戶轉換為具有密碼的包含資料庫用戶。
使用系統存儲過程:
sp_migrate_user_to_contained [ @username = ] N'user' , [ @rename = ] { N'copy_login_name' | N'keep_name' } , [ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' }
參考代碼:
DECLARE @username sysname ; DECLARE user_cursor CURSOR FOR SELECT dp.name FROM sys.database_principals AS dp JOIN sys.server_principals AS sp ON dp.sid = sp.sid WHERE dp.authentication_type = 1 AND sp.is_disabled = 0; OPEN user_cursor FETCH NEXT FROM user_cursor INTO @username WHILE @@FETCH_STATUS = 0 BEGIN EXECUTE sp_migrate_user_to_contained @username = @username, @rename = N'keep_name', @disablelogin = N'disable_login'; FETCH NEXT FROM user_cursor INTO @username END CLOSE user_cursor ; DEALLOCATE user_cursor ;
參考網址
https://msdn.microsoft.com/zh-cn/library/ff929275.aspx
連接時指定資料庫名。即連接串中,需要指定initial catalog 或Database