sql-server - 为同一用户创建的序列查询 sys.objects 所需的权限
问题描述
注意:我已经检查了这个问题和答案,但它没有回答我的用例:查询 dbo.sysobjects 的权限
如果序列不存在,我有以下存储过程来创建序列:
ALTER PROCEDURE seq.CreateSequenceIfNotExists
@FullSequenceName nvarchar(500)
WITH EXECUTE AS 'SequenceCreator'
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS (SELECT 1
FROM sys.objects
WHERE object_id = OBJECT_ID(@FullSequenceName) AND type = 'SO'))
BEGIN
DECLARE @SequenceCreateSql NVARCHAR(700)
SET @SequenceCreateSql = CONCAT('CREATE SEQUENCE ', @FullSequenceName, 'START WITH 1 INCREMENT BY 1 NO CACHE')
EXEC sp_executesql @stmnt = @SequenceCreateSql
END
END
GO
它作为 ( SequenceCreator
) 运行的用户只有以下权限:
GRANT CREATE SEQUENCE ON SCHEMA::seq TO SequenceCreator
GO
当这个存储过程运行时,它可以很好地创建序列。但是当我第二次运行它时,查询不sys.objects
返回任何行并且它尝试再次创建一个序列(当我按预期运行它时它返回一行dbo
)。
我假设用户SequenceCreator
没有权限在sys.objects
.
允许该用户检查其创建的序列是否存在所需的最低权限是多少?
(注意:我需要它是“最小权限”,因为我不能参数化序列的名称,所以它可能会受到 SQL 注入攻击。虽然在我的用例中不太可能,但我需要用户没有任何真正的利用权限)
解决方案
推荐阅读
- python - 将python的输出发送到PHP网页
- python - 运行我的 SQLAlchemy 代码时,我没有得到数据库文件
- jquery - 查找属性标题是否与选定的选项值匹配 - jquery
- c - 无限 while 循环代码正在打印 2 个 'hello's' 而不是 1 个 hello,其中代码从用户那里获取输入以检查字符。如果是 n 个循环中断
- sql - 用基于 2 个键(列值)的值替换 Null,Postgresql
- python - ModuleNotFoundError:没有名为“sklearn.linear_model.logistic”的模块
- go - 如何使用 GORM 插入带有外键的行?
- python - ValueError:解码字节时嵌入空字符
- scala - Spark 数据框转换以获取列中特定值的计数
- ethereum - EIP712:hashStruct 的编码成员值的顺序