gpt4 book ai didi

sql-server - AWS RDS for SQL Server - 如何创建启动存储过程?

转载 作者:行者123 更新时间:2023-12-05 06:13:37 25 4
gpt4 key购买 nike

我们正在迁移到 RDS,我们的一个应用程序需要访问 tempdb,我正在尝试找出创建与 RDS 一起使用的启 Action 业的最佳方法。目前我们能够创建一个存储过程,在 master 数据库中设置必要的权限,并使用 EXEC sp_procoption 'AddPermissionsToTempDb', 'startup', 'true' 命令将其设置为在启动时启动.

然而,在 RDS 中,我们无法在 master 数据库中创建存储过程。我尝试在用户拥有的数据库中创建存储过程,但是当我尝试使用 EXEC sp_procoption 'mydb.dbo.AddPermissionsToTempDb', 'startup', 'true' 创建启 Action 业时,它说了找不到存储过程或我没有权限...是否有其他方法可以在 RDS 上完成此操作?

最佳答案

能够找到基于 Jeroen Mostert's comment 的解决方案所以功劳归于他们。以下是我用来创建启 Action 业以向用户列表授予权限以在 AWS RDS SQL Server 实例上的 tempdb 上创建、控制和执行存储过程的完整查询:

USE msdb
go

declare @job_name varchar(50)
set @job_name = 'AddTempDBPermissionsOnStartup'

exec dbo.sp_delete_job @job_name = @job_name

declare @sql varchar(max)
select @sql = '
Declare @Users Table (username varchar(100) )
insert @Users(username) values (''[user1]''),
(''[user2]''),
(''[user3]'')

use tempdb
CREATE ROLE sp_executor GRANT EXECUTE TO sp_executor
CREATE ROLE sp_manipulator
GRANT CREATE PROCEDURE TO sp_manipulator
GRANT CONTROL TO sp_manipulator

DECLARE @username as NVARCHAR(100);
DECLARE User_Cursor CURSOR FOR
SELECT * from @Users
OPEN User_Cursor;
FETCH NEXT FROM User_Cursor INTO @username;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @username
IF EXISTS(SELECT * FROM [tempdb].sys.database_principals WHERE type_desc = ''SQL_USER'' AND name = @username)
PRINT '' - user already exists''
ELSE
BEGIN
PRINT '' - creating user''
DECLARE @Sql VARCHAR(MAX)
SET @Sql =
''USE Tempdb'' + char(13) +
''CREATE USER '' + @username + '' FOR LOGIN '' + @username + char(13) +
''EXEC sp_addrolemember sp_executor, '' + @username + char(13) +
''EXEC sp_addrolemember sp_manipulator, '' + @username
EXEC (@Sql)
END
FETCH NEXT FROM User_Cursor INTO @username;
END;
CLOSE User_Cursor;
DEALLOCATE User_Cursor;
GO
'


--Add a job
EXEC dbo.sp_add_job
@job_name = @job_name ;

--Add a job step to run the command
EXEC sp_add_jobstep
@job_name = @job_name,
@step_name = N'job step',
@subsystem = N'TSQL',
@command = @sql

--Schedule the job to run at startup
exec sp_add_jobschedule @job_name = @job_name,
@name = 'RunAtStartSchedule',
@freq_type=64

--Add the job to the SQL Server Server
EXEC dbo.sp_add_jobserver
@job_name = @job_name

关于sql-server - AWS RDS for SQL Server - 如何创建启动存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63248055/

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