sql server - 在触发器中设置权限

时间:2016-02-12 18:53:12

标签: sql sql-server sql-server-2008

我有一个像这样的触发器的一部分 -

    DECLARE @isInsert TINYINT

    SET @isInsert = (CASE @actionType WHEN 'I' THEN 1 ELSE 0 END)

    SELECT
        (CASE @isInsert WHEN 1 THEN i.groupId ELSE d.groupId END) AS groupId
    INTO #tmpRecordPermissionsToCheck
    FROM inserted i
    FULL JOIN deleted d
        ON i.userId = d.userId
            AND
            i.groupId = d.groupId

-- Stop everything if the user is attempting to edit something they're not entitled to...
--   special case(s): refer above for additional tblServer-specific checks required here
    DECLARE @errMsg VARCHAR(255)

    SELECT @errMsg = 'You do not have permission to edit permissions for group ' + IsNULL(ug.shortName, '')
    FROM #tmpRecordPermissionsToCheck tmp
    LEFT JOIN tblUserGroups ug
        ON ug.groupId = tmp.groupId
WHERE dbo.hasAdministrativePermissionsForGroup(tmp.groupId, dbo.getCurrentUser()) = 0


    IF (@errMsg IS NOT NULL)
    BEGIN
        RAISERROR ( @errMsg, 16, 1 )
        ROLLBACK TRANSACTION
        RETURN
    END

我正在调用一个返回0或1 bit值的单独函数。

如果我select dbo.isGlobalAdministrator(dbo.getCurrentUser())我得到1。

如何构建上述代码,以便IF (@errMsg IS NOT NULL)可以覆盖dbo.isGlobalAdministrator(dbo.getCurrentUser()) = 1

1 个答案:

答案 0 :(得分:1)

如果dbo.isGlobalAdministrator(dbo.getCurrentUser())= 1,我如何构造上面的代码以便覆盖IF(@errMsg IS NOT NULL)?

当你说被覆盖时,我认为你想绕过errormessage

所以只需添加以上错误消息

if ( dbo.isGlobalAdministrator(dbo.getCurrentUser()) = 1)
return