Tsql Azure SQL如何按过程创建数据库用户?
我想通过调用webapi从客户端应用程序注册新用户,dapper将在其中执行创建新db用户的过程,并在表中存储凭据(无密码)。注册后,我将更改带有用户凭据的连接字符串以登录 是否可以通过在Azure sql db上执行存储过程来动态创建db用户 我提出了这样的疑问: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
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的第二个连接并创建从第一个连接登录的用户,并将此用户添加到表用户。