原文:T-SQL问题解决集锦——数据加解密(2)

问题三、如何让指定用户可以对数据表进行Truncate操作?

Truncate在对大表全删除操作时,会明显比Delete语句更快更有效,但是因为它不需要存放日志,并且一定是全表删除,所以造成数据的不可恢复性。也说明了它的危险性。

但是,执行Truncate需要有表拥有者、系统管理员、db_owner、db_ddladmin这些里面的其中一种高权限角色才能执行。

对此,可以使用05之后的EXECUTE AS表达式来实现权限内容的切换:

1.      切换登录:EXECUTE AS LOGIN

2.      切换用户:EXECUTE AS USER

3.      切换执行权限:EXECUTE AS owner/’user name’,利用高用户权限来执行作业。此步骤可以在低权限实体下执行高权限操作,也能避免安全性漏洞。

另外,只有EXECUTE AS Caller可以跨数据库执行,而其他方式进行的权限切换仅限制于本数据库。

注意:执行EXECUTE AS USER模拟使用者切换时,需要先获得被模拟用户的授权。

可以使用REVERT来还原执行内容前的原始身份。

问题四、如何获取前端连接的信息,如IP地址和计算机名?

对于DBA工作或者某些特殊的应用程序,需要获取前端应用的系统信息。而这些信息如果用用户表来存储,代价会比直接读取数据库系统信息要大。所以建议适当读取系统表:

在连接数据库的session期间,都可以在master数据库中找到session信息,但是从05开始,有了很多DMV/DMF来实现这些功能:

l  Master.dbo.sysprocesses或者master.sys.sysprocesses:提供执行阶段的SPID、计算机名、应用程序名等。

l  Sys.dm_exec_sessions:记录每个session的基本信息,包括id、计算机名、程序名、应用程序名等

l  Sys.dm_exec_connections:记录每个连接到SQLServer实例的前端信息,包括网络位置、连接时间等等。

l  select
client_net_address 'Client IP Address',local_net_address'SQL ServerIP Address',*

l  from
sys.dm_exec_connections

l  wheresession_id=@@spid

在2005以后,建议使用DMV取代系统表。

问题五、如何避免SQL注入的攻击?

对于数据库应用程序,无论是那种DBMS,SQL注入都是一大隐患。

要避免SQL注入,应该最起码做到以下几点:

1.      检查输入的数据,应用程序不要相信用户输入的数据,必须经过检验后才能输入数据库。要排除%、--等特殊符号。

2.      避免果度暴露错误信息。建议可以转换成Windows事件或者是转换成应用程序内部错误信息。

3.      使用参数化查询或者存储过程

注意:

动态SQL是造成SQL注入的主凶

T-SQL问题解决集锦——数据加解密(2)的更多相关文章

  1. T-SQL问题解决集锦——数据加解密

    原文:T-SQL问题解决集锦--数据加解密 以下代码已经在SQLServer2008上的示例数据库测试通过 问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号, ...

  2. shiro框架学习-6-Shiro内置的Filter过滤器及数据加解密

    1.  shiro的核心过滤器定义在枚举类DefaultFilter 中,一共有11个 ,配置哪个路径对应哪个拦截器进行处理 // // Source code recreated from a .c ...

  3. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  4. 个人永久性免费-Excel催化剂功能第62波-单元格区域内数据加解密处理,最有效地保护数据方式

    Excel的数据保护能力有限,诸如之前提及过的工作表保护.工作薄保护等,都是十分微弱的保护措施,而对于强保护的工作薄打开密码来说,它像是个总开关一样,要么全不能看,要么就全看到.有这样的场景需求,一份 ...

  5. java基础/数据加解密(Mooc)

    一.消息摘要算法 常用摘要算法: 以下 (HEX)内容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1.消息摘要算法MD5及MD族(MD2,MD4) 消 ...

  6. php利用自定义key,对数据加解密的方法

    客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...

  7. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    当前使用的是Linux系统,已经按装使用OpenSSL软件包, 一.使用OpenSSL来生成私钥和公钥 1.执行命令openssl version -a 验证机器上已经安装openssl 1 open ...

  8. Java中使用OpenSSL生成公钥私钥进行数据加解密

    当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...

  9. unity3d 数据加/解密

    [/font]using System.Collections; using System.Text; using System.Security.Cryptography; using System ...

随机推荐

  1. sql server 行列互转

    1 列转行 测试脚本 ),课程 ),分数 int) ) ) ) ) ) ) go 转化脚本 select 姓名 , end) 语文, end) 数学 , end) 物理 from tb group b ...

  2. HTML 5最终确定,八年后,我们再谈谈如何改变世界

    从原:http://www.36kr.com/p/216655.html 我们第一次谈论HTML5要改变世界大概是由于乔布斯,他坚持在iOS上不兼容Flash,在Adobe统治多媒体开发的那个年代.这 ...

  3. Android中TweenAnimation四种动画切换效果

    点击每个按钮都会有对应的动画显示 activity代码: package com.tmacsky; import android.app.Activity; import android.os.Bun ...

  4. hibernate学习——Set集合配置

    Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...

  5. Android下的单元測试

    android下的单元測试 在AndroidManifest.xml文件里配置下面信息: 在manifest节点下加入: <!-- 指定測试信息和要測试的包 --> <instrum ...

  6. php laravel 帧 该文件上传

    好,我承认我的忠告. 今天laravel框架编写一个文件上传部分.总能找到不正确的路径.但是,终于攻克. 以下我分享一下自己的学习体会吧. client <form method="P ...

  7. 【LeetCode】【Python解决问题的方法】Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  8. Type mismatch: cannot convert from Enumeration&lt;String&gt; to Enumeration&lt;Object&gt;

    完整的错误信息: Description Resource Path Location TypeType mismatch: cannot convert from Enumeration<St ...

  9. Android AlarmManager报警的实现

    什么是AlarmManager? AlarmManager它是Android经常使用的系统-Level提醒服务,我们指定为广播中的特定时间Intent. 我们设定一个时间,然后在该时间到来时.Alar ...

  10. Android 屏幕实现水龙头事件

    在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件.事件说明例如以下: onClick(View v)一个普通的点击button事件 boolean onK ...