sp_msreplcheck_publish 存储过程位于哪里?

Fil*_*loo 3 sql-server transactional-replication

sp_msreplcheck_publish是一个 sp,用于检查您是否有足够的权限运行语句来更改已发布的表(事务复制)。

尝试在没有提升权限的情况下更改已发布的表会触发tr_MStran_altertable调用sp_MStran_ddlrepl执行的触发器sp_msreplcheck_publish。它正确返回:

只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员才能执行此操作。

对我来说,神秘的是我在发布的数据库或主数据库中找不到这个 sp。是按需生成的吗?

Aar*_*and 5

如果在一般视图中隐藏,但是如果您使用专用管理员连接进行连接,则可以通过以下方式看到它master

USE [master];
GO

SELECT OBJECT_DEFINITION(OBJECT_ID(N'sys.sp_msreplcheck_publish'));
Run Code Online (Sandbox Code Playgroud)

但不确定您需要查看定义的目的,或者为什么知道它的存储位置会帮助您完成任何事情。它真的很简单,而且无论它存储在哪里,你都无法更改它:

create procedure sys.sp_MSreplcheck_publish 
as
begin
    --
    -- Do the sysadmin check first as it is 4 times more efficient
    -- than is_member call and reduces performance overhead in case 
    -- the user has sysadmin privileges
    --    
    if    is_srvrolemember('sysadmin') = 1 or
        is_member ('db_owner') = 1
    begin
        return (0)
    end
    else
    begin
        raiserror (21050, 14, -1)
        return (1)
    end
end
Run Code Online (Sandbox Code Playgroud)