微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询 sys.objects 以获取同一用户创建的序列所需的权限

如何解决查询 sys.objects 以获取同一用户创建的序列所需的权限

注意:我已经检查了这个问题和答案,但它没有回答我的用例:Permission for querying 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 注入攻击击中。虽然在我的使用中不太可能情况下,我需要用户没有任何真正的权限来利用)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。