• 怎样修改SQL Server 2005/2008的系统存储过程(转)


    我们知道,SQL Server 2005/2008的系统存储过程在正常情况下是无法直接修改的。

    尽管本文是介绍怎样修改它的,但在这里,我还是建议大家尽量不要去修改它。(好像有点绕哈...)

    OK,闲话少说,下面我举个实际案例讲解一下,如对于系统存储过程sp_Monitor,若要运行此存储过程,用户必须是 sysadmin 固定服务器角色的成员。

    通过执行命令:sp_helptext 'sp_Monitor',我们可以看到,该过程中存在这样的语句:

    [c-sharp] view plaincopy
     
    1. if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this.  
    2.         begin  
    3.                 raiserror(15247,-1,-1)  
    4.                 return(1)  
    5.         end  

    在这里,我想将该过程中的这些语句去掉,让它能被普通用户执行。下面是具体的修改步骤:

    1、停止SQL Server服务

    2、进入命令提示行模式。依次执行以下命令:

       1)  cd C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn  --注:这是SQL 2005的默认安装目录,如你改变了实际安装路径,请按实际修改

       2)  sqlservr -s MSSQLSERVER -m --注:启动SQL Server服务,-s 指定实例名称(这里的实例名称是MSSQLSERVER,可按实际修改), -m 指定以单用户管理模式启动

    3、以数据库专用管理员(DAC)方式连接SSMS (此处可参见 SQL Server 数据库专用管理员DAC连接方式)

    4、执行语句:USE mssqlsystemresource

         这里,我友情说明一下,mssqlsystemresource是一个系统数据库,它存储了所有系统存储过程、视图和函数。但它对于所有用户来说,都是不可见的,也就是说,在SSMS、sys.databases等里面,你都看不到它,如果在非DAC连接下,执行上述语句,系统会报错。

    5、执行语句:alter database mssqlsystemresource set read_write  --将mssqlsystemresource置为可修改状态,mssqlsystemresource数据库默认是只读的。

    6、sp_helptext 'sp_Monitor'  --显示该存储过程的源代码,你可将sp_Monitor改成你实际要改的存储过程名。

    7、拷贝步骤6的结果,将create proc改成alter proc,并按你的实际需求修改代码,这里,我将前述的"if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this......"等语句去掉。

    8、执行修改后的语句。 --到这一步为止,系统存储过程sp_Monitor已经被我们改了。

    9、alter database mssqlsystemresource set read_only  --将mssqlsystemresource还原为只读状态

    10、最后,停止SQL Server服务,并以正常方法重新启动SQL Server.

    老实说,上面的方法显得较为繁琐,不得万不得已,我不推荐使用。(再强调一次)

    其实,可以拷贝系统存储过程的源代码到一个新建的存储过程中,然后再对这个新建的存储过程进行修改,在使用的时候,直接调用这个新过程即可。同样可以达到目的,而且还没有任何副作用。

  • 相关阅读:
    经典面试题目C语言
    论C语言中二级指针和二维数组之间的区别
    判断单链表中是否有环找到环的入口节点
    论decltype和auto的区别
    在ubuntu下安装opencv
    C中有关引用和指针的异同
    (四)关于读文件的结束的判别方法(EOF和feof)以及区别
    (三)论sizeof与strlen之间的区别
    (二)C语言文本流和二进制流的区别
    (一)C的编译,printf,规范化
  • 原文地址:https://www.cnblogs.com/qanholas/p/3656216.html
Copyright © 2020-2023  润新知