上面我们完成了在pubs数据库中添加HumanResource架构,接着把jobs表放到HumanResource架构中。
|
当我们再次执行以下SQL语句时,SQL Server提示jobs无效,这是究竟什么原因呢?之前还运行的好好的。
SELECT job_id, job_desc, min_lvl, max_lvl FROM jobs
当我们输入完整的表名“架构名.对象名”(HumanResource.jobs)时,SQL语句执行成功。
为什么之前我们执行SQL语句时不用输入完整表名dbo.jobs也可以执行呢?
这是因为默认的架构(default schema)是dbo,当只输入表名时,Sql Server会自动加上当前登录用户的默认的架构(default schema)dbo。
由于我们使用自定义架构,这也降低了数据库表名被猜测出来的可能性。
LINQ to SQL
前面使用了存储过程和参数化查询,这两种方法都是非常常用的,而针对于.NET Framework的ORM框架也有很多,如:NHibernate,Castle和Entity Framework,这里我们使用比较简单LINQ to SQL。
var dc = new pubsDataContext();
int result;
// Validates jobId is int or not.
if (int.TryParse(jobId, out result))
gdvData.DataSource = dc.jobs.Where(p => p.job_id == result);
gdvData.DataBind();相比存储过程和参数化查询,LINQ to SQL我们只需添加jobs.dbml,然后使用LINQ对表进行查询就OK了。
总结
我们在本文中介绍了SQL Injection的基本原理,通过介绍什么是SQL Injection,怎样进行SQL Injection和如何防范SQL Injection。通过一些程序源码对SQL的攻击进行了细致的分析,使我们对SQL Injection机理有了一个深入的认识,作为一名Web应用开发人员,一定不要盲目相信用户的输入,而要对用户输入的数据进行严格的校验处理,否则的话,SQL Injection将会不期而至。
(责任编辑:闫小琪)
深层防御方法代表了一套全方位安全哲学,帮助保护计算环境免受许多攻击手法的攻击。 ...[详细]
针对一般中小企业型来说,如果希望对企业网络进行安全管理,不一定非得花高价钱购买专...[详细]
要在Windows Vista加密文件或文件夹,可按下面的操作步骤进行:。 ...[详细]
Visa组织在2001年推出一个他们称为3DS的安全协议,也就是3 Domain Secure的缩写。试图...[详细]
曾令中国杀毒业难堪的AV-Comparatives国际权威评测传来喜讯:在最新公布的AVC回溯测试...[详细]