也谈 SQL Injection 解决方案

SQL Injection (注入)

 

虽然学数据库时间不长,但我也来谈谈SQL Injection解决方案.

 

方案1:参数化SQL 语句

 

方案2:存储过程

 

方案3:给与可能的最低权限 给用户( 例如:如果只需要'SELECT'则只给与'SELECT'权限)

note: 即使只给与select权限,用户依然可以对临时表进行CRUD.

create table #AAA
(
  id int
);

go

insert into #AAA values (1)

SELECT * FROM #AAA

truncate table #AAA
SELECT * FROM #AAA

drop table #AAA

每个人都关心数据安全。如果不关心的话,可能没有意识到访问服务器中的敏感数据是非常容易的。因为SQL   SERVER在这方面已经替我们考虑过了,所以在我们开发应用程序就可以直接使用SQL   SERVER的安全策略。  

        在SQL   SERVER中,我们可以在ENTERPRISE   MANAGER中创建一个登录帐号,并且赋予一定的权限,如果要做到我们的应用程序中呢?  

        SQL   SERVER提供了如下系统过程  

        一、SP_ADDLOGIN         添加登录帐号  

                SP_ADDLOGIN   login_id[,password[,defaultdb[,defaultlanguage>  

                login_id                     帐号名  
                password                     口令  
                defaultdb                   缺省数据库,默认为MASTER数据库。  
                defaultlanguage       缺省语言 

        二、SP_ADDUSER         添加用户  

                SP_ADDUSER   login_id[,username[,rolename}  

                username                     登录数据库的别名  
                rolename                     用户隶属的组名  

        三、SP_DROPLOGIN     删除帐号  

                SP_DROPLOGIN   login_id  

        四、SP_DROPUSER       删除用户  

                SP_DROPUSER   username  

        五、GRANT                   授予用户或组许可权限  

                GRANT   permission_list   ON   object_name   TO   name_list  

                permission_list         授予的权限的清单  
                object_name                 被授予权限的表、视图或存储过程  
                name_list                     被授予权限的用户或组的清单  

        六、REVOKE                 收回用户或组许可权限  

                REVOKE   permission_list   ON   object_name   FROM   name_list  

        七、SP_PASSWORD       修改口令  

                SP_PASSWORD   [old_password,]new_password[,login_id]  

        前六个过程只能SA或被SA授予Security   Administrators权限的人才可使用,第七个过程普通用户可能使用,但不能使用login_id项,只有上述权限的人才可使用此项  

   
应用实例:  

        添加  

                declare   @login   varchar(6),@pass   varchar(11)  

                exec   sp_addlogin   @login,@pass,databasename  
                exec   sp_adduser   @login,@login,public  

                grant   insert,select,update,delete   on   table1   to   public  

        删除                  

                revoke   insert,delete   on   table1   from   public  

                exec   sp_dropuser   @login  
                exec   sp_droplogin   @login  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值