zoukankan      html  css  js  c++  java
  • 【转】sql server 批量修改表和存储过程的所有者——提高SQL安全性

    在“深入《daxia123 网站木马” 来自微软专家的SQL注入防范方法》文章里,我深入了解了自微软专家的SQL注入防范方法,
    为了确保使用数据库的Web应用程序最少访问权限。我可以批量修改表和存储过程的所有者,然后通过控制所有者的权限来实现SQL安全配置,
    下面是批量修改表和存储过程的所有者的方法:


    以下user代表新的所有者

    1、更新数据表所有者

    批量方法:EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ''?'',''user''   '

    单个方法:exec   sp_changeobjectowner   'city','user' --city表名

    2、更新存储过程所有者

    CREATE   PROCEDURE   ChangeProcOwner  
      @OldOwner as   NVARCHAR(128),--参数原所有者  
      @NewOwner as   NVARCHAR(128)--参数新所有者  
      AS  
       
      DECLARE   @Name   as   NVARCHAR(128)    
      DECLARE   @Owner as   NVARCHAR(128)  
      DECLARE   @OwnerName as   NVARCHAR(128)  
       
      DECLARE   curObject   CURSOR   FOR    
      select 'Name' =   name,  
      'Owner' =   user_name(uid)  
      from   sysobjects  
      where   user_name(uid)=@OldOwner   and   xtype='p'  
      order   by   name  
       
      OPEN     curObject  
      FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
      WHILE(@@FETCH_STATUS=0)  
      BEGIN          
      if   @Owner=@OldOwner    
      begin  
      set   @OwnerName   =   @OldOwner   +   '.'   +   rtrim(@Name)  
      exec   sp_changeobjectowner   @OwnerName,   @NewOwner  
      end  
       
      FETCH   NEXT   FROM   curObject   INTO   @Name,   @Owner  
      END  
       
      close   curObject  
      deallocate   curObject  
     
    GO


    执行方法:

    exec   ChangeProcOwner   'dbo','user'
    或者
    exec   ChangeProcOwner   '?','user'

    还有一种方法:

    --如果一个数据库中(表和存储过程)有多个用户名,而要把它所有都改成dbo 就可以用如下的语句
    Select 'sp_changeobjectowner ''' + User_Name(Uid) + '.' + name + ''',''dbo'' ' From sysobjects Where Uid Not in (User_ID('dbo')) And Type In ('U','P')
    --然后把查询出来的语句拷贝出来,直接运行就表和存储过程的对象都会改过来,但SQL SERVER要先退出来,再进去,才能看到更改后的结果

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/songz210/archive/2009/01/20/3838743.aspx

  • 相关阅读:
    tensorflow学习3---mnist
    tensorflow学习2-线性拟合和神经网路拟合
    关于泛型数据结构中OrderBy的使用
    敏捷开发之观察者模式
    敏捷开发之设计文档
    C#算法实现获取树的高度
    武林高手?敏捷开发,唯velocity取胜
    C#接口多继承方法重名问题
    .Net平台技术栈?不止于此
    浅谈C#中Tuple和Func的使用
  • 原文地址:https://www.cnblogs.com/gebenhagen/p/1719154.html
Copyright © 2011-2022 走看看