【发布时间】:2020-09-01 23:57:20
【问题描述】:
我写了以下存储过程:
CREATE PROCEDURE dbo.usp_DEMO
@LOGINSQL VARCHAR(30),
@DBNAME VARCHAR(40)
WITH EXECUTE AS owner
AS
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'USE'
SET @SQL = @SQL + ' ' + @DBNAME + ' ' + ' CREATE USER ' + ' '
+ @LOGINSQL + ' ' + ' FOR LOGIN ' + ' ' + @LOGINSQL + ' '
+ ' ALTER ROLE [DB_OWNER] ADD MEMBER ' + ' '
+ @LOGINSQL
EXEC sp_executesql @SQL
这样运行:
use master
go
exec usp_DEMO '<LOGIN>','<DATABASE>'
我在 SQL Server 2019 STD 版 (RTM-CU6) (KB4563110) 中从 Master 运行,我收到此错误:
消息 916,第 14 级,状态 2,第 14 行
服务器主体“”无法在当前安全上下文下访问数据库“ ”。
这个想法是使用存储过程将登录映射到数据库并赋予db_owner 角色。
知道如何解决这个错误吗?
【问题讨论】:
标签: sql-server sql-server-2019 database-security