Mah*_*V S 4 t-sql sql-server azure dacpac azure-sql-database
我的新客户计划使用 Azure 托管 SQL 数据库服务。我正在使用 dacpac 来部署数据库。在 dacpac 中,我有一个部署后脚本来创建一个 sql 用户,如下所示
IF NOT EXISTS (SELECT name
FROM sys.server_principals
WHERE name = 'myusername')
BEGIN
CREATE LOGIN myusername
WITH PASSWORD = '******';
END
GO
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在 Azure(使用目标平台 - Microsoft Azure SQL 数据库 V12 编译)中应用 dacpac 时,它会引发以下错误。
An error occurred while the batch was being executed.
Updating database (Failed)
*** Could not deploy package.
Error SQL72014: .Net SqlClient Data Provider: Msg 208, Level 16, State 1, Line 4 Invalid object name 'sys.server_principals'.
Error SQL72045: Script execution error. The executed script:
Run Code Online (Sandbox Code Playgroud)
从消息看来,我不能依赖该sys.server_principals对象。
我怎样才能克服这个问题?这有什么等价物吗?
查看包含的数据库用户模型 ( https://msdn.microsoft.com/en-us/library/ff929188.aspx )。
在包含的数据库用户模型中,主数据库中的登录名不存在。相反,身份验证过程发生在用户数据库中,用户数据库中的数据库用户在主数据库中没有关联的登录名。
IF NOT EXISTS (
SELECT [name]
FROM sys.database_principals
WHERE [name] = 'myusername'
)
BEGIN
CREATE USER [myusername] WITH PASSWORD = '********';
END
Run Code Online (Sandbox Code Playgroud)
您需要在 SQL 脚本中删除对 SQL 登录名的检查,以将 dacpac 部署到 Azure SQL 数据库。
这是因为在 Azure SQL Server 中,您只能检查master数据库的sys.sql_logins表中的 SQL 登录名。
此外,Azure SQL 数据库也不支持引用其他数据库,即使它们位于同一 Azure SQL Server 中。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
4899 次 |
| 最近记录: |