2014-10-02 28 views
2

我有一個Visual Studio 2013 SQL數據庫項目,它使用「部署數據層應用程序...」選項爲SQL Server部署SQL數據庫創建一個DACPAC文件SQL Server Management工作室(SSMS)。使用DACPAC創建的用戶無法登錄

作爲該項目的一部分,有一個安全文件夾與其中創建所需的用戶的SQL腳本。該腳本是:

CREATE LOGIN [MyLogin] 
    WITH PASSWORD = N'MyPassword', 
    DEFAULT_DATABASE = [MyDatabase], 
    DEFAULT_LANGUAGE = [us_english], 
    CHECK_EXPIRATION = OFF, 
    CHECK_POLICY = OFF 
GO 

CREATE USER [MyLogin] FOR LOGIN [MyLogin] WITH DEFAULT_SCHEMA=[dbo]; 
GO 

exec sp_addrolemember 'db_datareader', N'MyLogin' 
GO 

GRANT EXECUTE ON OBJECT::[dbo].[MyObject1] TO [MyLogin]; 
GO 

GRANT EXECUTE ON OBJECT::[dbo].[MyObject2] TO [MyLogin]; 
GO 

GRANT EXECUTE ON OBJECT::[dbo].[MyObject3] TO [MyLogin]; 
GO 

將DACPAC發佈到SQL Server時,使用該數據庫的應用程序無法登錄。在SSMS中查看用戶屬性表明數據庫用戶和SQL Server登錄主體之間沒有關聯,這大概會阻止應用程序登錄。

但是,在SSMS中手動運行上述腳本可以正確創建用戶並且應用程序可以成功登錄。

爲什麼DACPAC創建的用戶沒有正確設置數據庫映射,並且需要在腳本和/或DACPAC屬性中執行哪些操作才能使所有內容都按預期工作。

感謝, 馬丁

回答

4

所以最終我得到了這個與同事的幫助下,與缺少的部分是CREATE USER ...語句後的以下兩行:

GRANT CONNECT TO [MyLogin]; 
GO 

現在DACPAC正確部署SQL數據庫,應用程序可以使用創建的MyLogin用戶連接到數據庫。

相關問題