Tsql Azure SQL如何按过程创建数据库用户?

Tsql Azure SQL如何按过程创建数据库用户?,tsql,azure,stored-procedures,azure-sql-database,Tsql,Azure,Stored Procedures,Azure Sql Database,我想通过调用webapi从客户端应用程序注册新用户,dapper将在其中执行创建新db用户的过程,并在表中存储凭据(无密码)。注册后,我将更改带有用户凭据的连接字符串以登录 是否可以通过在Azure sql db上执行存储过程来动态创建db用户 我提出了这样的疑问: CREATE PROCEDURE [dbo].[AddDbUser] @Login nvarchar(50), @Password nvarchar(50), @Mail nvarchar(70), @Phone nvarchar

我想通过调用webapi从客户端应用程序注册新用户,dapper将在其中执行创建新db用户的过程,并在表中存储凭据(无密码)。注册后,我将更改带有用户凭据的连接字符串以登录

是否可以通过在Azure sql db上执行存储过程来动态创建db用户

我提出了这样的疑问:

CREATE PROCEDURE [dbo].[AddDbUser]
@Login nvarchar(50), 
@Password nvarchar(50),
@Mail nvarchar(70),
@Phone nvarchar(9),
@SQL nvarchar(1000)
AS
BEGIN

SET @SQL = 'USE [testdb] '
    + 'CREATE LOGIN '+quotename(@Login)+' WITH PASSWORD = 
    '+quotename(@Password,'''')+'; '
    + 'CREATE USER '+@Login +'; '
    + 'EXEC [sys].[sp_addrolemember] ''db_datareader'', '+@Login+'; '
    + 'EXEC [sys].[sp_addrolemember] ''db_datawriter'', '+@Login+'; '
    + 'GRANT EXECUTE ON SCHEMA :: [dbo] TO '+@Login+'; '

    + 'INSERT INTO [dbo].[Users] (Login, Mail, Phone) '
    + 'VALUES ('+quotename(@Login,'''')+', '+quotename(@Mail,'''')+', 
    '+quotename(@Phone,'''')+');'

EXEC (@SQL)
END
GO
exec[dbo].[AddDbUser]'dawidtest','password','mail@mail.pl“,'123123123',null
导致消息:“用户必须在主数据库中。”,但当我添加
时,使用[master]
而不是
使用[testdb]
我得到消息:“不支持使用语句在数据库之间切换。使用新连接连接到其他数据库。“

任何人都可以给我一些如何解决我的问题的建议,或者有其他更优雅的解决方案吗

提前谢谢!

根据,由于不支持
使用
语句,您必须分两步执行:

需要注意的一点是,SQL Azure不允许使用Transact-SQL语句,这意味着您无法创建一个脚本来同时执行create LOGIN和create USER语句,因为这些语句需要在不同的数据库上执行

因此,请遵循您收到的消息中给出的建议。创建两个sql语句并使用不同的连接执行它们

一个连接到主数据库并创建登录名,另一个连接到特定数据库并创建用户。

根据,您必须分两步执行,因为不支持
USE
语句:

需要注意的一点是,SQL Azure不允许使用Transact-SQL语句,这意味着您无法创建一个脚本来同时执行create LOGIN和create USER语句,因为这些语句需要在不同的数据库上执行

因此,请遵循您收到的消息中给出的建议。创建两个sql语句并使用不同的连接执行它们

一个连接到主数据库并创建登录名,另一个连接到特定数据库并创建用户。

谢谢!:)正如您所说,在我的控制器中,我添加了创建用户的方法,我打开到主数据库的第一个连接并创建登录名,接下来我打开到testdb的第二个连接并创建登录名的用户rom第一个连接并将此用户添加到表用户。谢谢!:)正如您所说,在我的控制器中,我添加了创建用户的方法,我将打开到master db的第一个连接并创建登录,接下来我将打开到testdb的第二个连接并创建从第一个连接登录的用户,并将此用户添加到表用户。