Sql server 如何授予用户从SQL Server存储过程内部访问数据库的权限-获取错误:过程中不允许使用数据库语句
我需要授予用户从SQL Server中的存储过程内部访问数据库的权限,但当我尝试使用此代码时,使用中的数据库不会更改,并且当我在不使用EXEC的情况下运行代码时,会出现错误: 过程中不允许使用数据库语句 我的代码:Sql server 如何授予用户从SQL Server存储过程内部访问数据库的权限-获取错误:过程中不允许使用数据库语句,sql-server,stored-procedures,Sql Server,Stored Procedures,我需要授予用户从SQL Server中的存储过程内部访问数据库的权限,但当我尝试使用此代码时,使用中的数据库不会更改,并且当我在不使用EXEC的情况下运行代码时,会出现错误: 过程中不允许使用数据库语句 我的代码: CREATE PROCEDURE [dbo].[usp_AddUserDBToTables] (@UserGroup NCHAR(30), -- DBdetail, DBxref @DBName NCHAR(30)) -- DBdetail, D
CREATE PROCEDURE [dbo].[usp_AddUserDBToTables]
(@UserGroup NCHAR(30), -- DBdetail, DBxref
@DBName NCHAR(30)) -- DBdetail, DBxref
AS
BEGIN
DECLARE @sqlcmd NVARCHAR(1024);
-- Add the UserGroup to the new UserDB
SET @sqlcmd = 'USE [' + rtrim(ltrim(@DBName)) + ']'
PRINT (@sqlcmd)
EXEC (@sqlcmd)
PRINT 'now using ' + db_name()
SET @sqlcmd = 'CREATE USER [' + rtrim(ltrim(@UserGroup)) + '] FOR LOGIN [' + rtrim(ltrim(@UserGroup)) + ']'
PRINT (@sqlcmd)
EXEC (@sqlcmd)
SET @sqlcmd = 'ALTER ROLE [db_owner] ADD MEMBER [' + rtrim(ltrim(@UserGroup)) + ']'
PRINT (@sqlcmd)
EXEC (@sqlcmd)
SET @sqlcmd = 'USE [HOSTED_SUPPORT]'
PRINT (@sqlcmd)
EXEC (@sqlcmd)
END
用户组被添加到托管的_支持中,而不是@DBName。Print语句生成了此结果,但在使用动态SQL时未收到任何错误:
USE [ZU_1077a]
now usingZMIT_HOSTED_SUPPORT
CREATE USER [ZMCLIENT\1007 FirstBank] FOR LOGIN [ZMCLIENT\1007 FirstBank]
ALTER ROLE [db_owner] ADD MEMBER [ZMCLIENT\1007 FirstBank]
USE [ZMIT_HOSTED_SUPPORT]
如何从存储过程内部执行此操作?您需要将所有命令放在一个动态SQL中并运行它,因为当执行包含USE命令的第一个动态SQL时,USE数据库将失效
因此,除去最后一个EXEC之外的所有EXEC,并在@sqlcmd中包含所有SQL。运行EXEC the@sqlcmd.有什么原因需要在这里进行动态查询吗?太棒了!谢谢你@PeterHe!