gpt4 book ai didi

sql - 在 SQL Azure 上的动态 SQL 中创建用户

转载 作者:行者123 更新时间:2023-12-02 00:03:58 27 4
gpt4 key购买 nike

我想编写一个存储过程来检查数据库所在的环境(基于名称)并为我们的应用程序创建适当的用户和角色。

如果我们在环境之间移动数据库,这将使我们能够自动设置权限(目前由于 Windows Azure SQL 数据库的限制,我们必须手动运行一个不理想且容易出现人为错误的脚本)。

所以我们使用的语法是:

DECLARE @UserToAdd VARCHAR(50) = (
SELECT CASE
WHEN @Environment = 'Development' THEN 'DevelopmentApplicationUser'
WHEN @Environment = 'Test' THEN 'TestingApplicationUser'
ELSE ''
END
)

IF (@UserToAdd != '')
BEGIN
EXEC ('CREATE USER [' + @UserToAdd + '] FOR LOGIN [' + @UserToAdd + '];')

EXEC ('EXEC sp_addrolemember N''WebUser'', N''' + @UserToAdd + ''';')
END

这在我们的开发服务器 (SQL Server 2008 R2) 上工作正常,但在 Windows Azure SQL 数据库中我们收到以下错误:

The CREATE USER statement must be the only statement in the batch

现在是MSDN documentation是否声明:

If the CREATE USER statement is the only statement in a SQL batch, Windows Azure SQL Database supports the FOR | FROM LOGIN clause. If the CREATE USER statement is not the only statement in a SQL batch or is executed in dynamic SQL, the FOR | FROM LOGIN clause is not supported.

但这意味着我们无法自动执行我们的权限。

有人解决了这个问题并能够生成创建用户的动态 sql 吗?或者有没有办法在存储过程中解决这个问题?

最佳答案

我向 Microsoft 提出了一个支持案例,看看这是否可行,得到的答复是,如果您想检查登录名或用户是否存在,然后创建该登录名或用户,则必须使用单独的连接进行检查然后是创作。如果同一事务或批处理中不存在,则无法检查和创建。在 SQL Azure 中。

H,奥利

关于sql - 在 SQL Azure 上的动态 SQL 中创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19586559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com