博文

SQL Server:安全设计从头起(2005-12-29 23:38:00)

摘要:开发人员和管理人员通常不断地考虑程序安全问题的策略──添加安全措施不再是一个可以完全接收的方法。程序的安全问题必须从设计的开始就得考虑,并贯穿开发的整个过程。以后如果要开发一个SQL Server的数据库,你一定要从开始就遵循这些安全设计规则 最基本的要点
如果你不能理解SQL Server security基本的概念,就马上先停止开发并先阅读这些开发准则,你不可能在不知道这些概念的基础上就能够正确地使一个数据库安全化。程序的安全正如一辆卡车一样。你具有一个发动机,一把钥匙,当钥匙打开发动机即发动机启动之后,就有可能发生的全部过程。如果你忽略了某些细节,驾驶过程中就会发生很多麻烦。在问题产生之后,你可以将卡车交给一个修理工,然而对于程序的安全问题,你自己将是数据库的修理工。
开始,你必须选择以下两种安全模式:
l Windows 认证模式:用户通过一个现成的Windows用户帐号来连接服务器。当一个用户试图与一个服务器连接的时候,SQL Server将会认证用户的Windows帐号的名称和密码。用户不能同时进入网络和SQL Server,只能进入其中的一个。这一方法也被称为一个被依赖的连接。 l 混合模式:这一模式将Windows认证模式和SQL Server认证联接在一起。用户可以通过一个Windows用户帐号进行连接,这正如Windows认证一样。但是,你也可以在SQL Server中直接建立用户帐号。每一个SQL Server帐号都存储了一个用户名和密码。 我们建议在可能的情况下都使用Windows认证模式。然而,混合模式很可以使用,特别是在SQL Server 7.0(或更早版本)都可以使用。.对于早期的SQL Server版本,SQL Server认证存在一些缺点。Windows认证已经集成了操作系统的安全系统,这就提供了比SQL Server认证更多的安全特性,很容易的使用,效率更加高,安全性更加好。在设计开始的时候,你应该认真考虑选择哪一种模式最为合适。
密码
无论采用哪一些模式,你应该记住在SQL Server中为系统管理者(sa)设置一个密码。当安装SQL Server时,安装程序会自动建立一个带有SQL Server注册名称(sa)和一个空白密码的管理用户。如果你保持这些用户设置原样而使用混合安全模式,任......

阅读全文(2127) | 评论:0

SQL Server连接ACCESS数据库的实现(2005-12-29 23:34:00)

摘要:不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与其它数据库的互联。本文的测试环境为:操作系统: WINDOWS2000 SERVER (繁体系统) 安装数据库: SQLSERVER2000(英文版)和ACCESS
具体实现步骤:
1. 要求PC机上安装ACCESS和sqlserver2000软件。
2. 配置windows的ODBC数据源:
开始菜单—》程式集—》系统管理工具—》资料数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择MICROSOFT ACCESS DRIVER(*.MDB)—》在ODBC MICROSOFT ACCESS SETUP画面中, 自定义数据源名称(随意如:ACCESSTEST)—》DATABASE SELECT可以选择要建立ODBC的ACCESS资料库(*.MDB) —》OK完成。 配置和测试ODBC完成!
3. 配置sqlserver2000中的连接服务器:
企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称; 选其他数据源; 指定程序名称为:MICROSOFT OLE DB PROVIDER FOR ODBC DRIVER; 产品名称可不填; 数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的ACCESS数据库中的用户名和密码 —》 安全性标签页里:设置用此安全上下文进行,并录入ACCESS的数据库用户名和密码—》服务器选项标签页可默认—》确定。
4.准备工作全部完成!在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该ACCESS数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式为: [连接服务器名]..[ACCESS用户].[表......

阅读全文(2243) | 评论:0

SQL数据库的一些攻击(2005-12-29 23:26:00)

摘要:对于国内外的很多新闻,BBS和电子商务网站都采用ASP+SQL设计,而写 ASP的程序员很多(有很多刚刚毕业的),所以,ASP+SQL的攻击成功率也比较高。这类攻击方法与NT的版本和SQL的版本没有多大的关系,也没有相应的补丁,因为漏洞是程序员自己造成的,而且大多数讲解ASP编程的书上,源代码例子就有这个漏洞存在,其实只是一些合法的ASP对SQL的请求,就留下后患无穷! 
这种攻击方法最早源于'or'1'='1的漏洞(我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;exec sp_addlogin hax(在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQL Server账号是个管理员,其次请求的提交变量在整个SQL语句的最后,因为有一些程序员采用SELECT * FROM news WHERE id=... AND topic=... AND ..... 
这种方法请求数据库,那么如果还用以上的例子就会 =版权所有  热点网络 热点下载  热点网络学院  版权所有=
news.asp?id=2;exec sp_addlogin hax 变成SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic=... AND ... 
整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin自然也不能正常运行了,因此试试看下面这个方法news.asp?id=2;exec sp_addlogin hax;-- 后面的--符号把sp_addlogin后的判断语句变成了注释,这样就不会有语法错误了,sp_addlogin正常执行! 
那么我们连一起来用吧 
news.asp?id=2;exec......

阅读全文(2595) | 评论:0

导出SQL Server表到DBF文件的存储过程(2005-12-29 23:25:00)

摘要:CREATE proc exportToDBF
@tbname sysname,          --要导出的表名
@path nvarchar(1000),     --文件存放目录
@fname nvarchar(250)='',  --导出的文件名,默认为表名
@over bit=0               --是否覆盖已经存在的文件,如果不覆盖,则直接追加
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)
declare @lastsql varchar(255) --参数检测
if isnull(@fname,'')='' set @fname=@tbname+'.dbf' --文件路径和文件名
if right(@path,1)<>'\' set @path=@path+'\'
create table #tb(a bit,b bit,c bit)
set @sql=@path+@fname --判断dbf文件是否存在,如果存在返回结果a=1,b=0,c=1
insert into #tb exec master..xp_fileexist @sql
if exists(select 1 from #tb where a=1)
 if @over=1
  begin
   set @sql='del '+@sql
   exec master..xp_cmdshell @sql,no_output
&n......

阅读全文(5885) | 评论:0

SQL SERVER 和ACCESS的数据导入导出(2005-12-29 23:18:00)

摘要:常规的数据导入导出: 使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:   1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation   2Services(数据转换服务),然后选择  czdImport Data(导入数据)。   3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。   4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。   5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。 6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。 Transact-SQL语句进行导入导出: 1.         在SQL SERVER里查询access数据: -- ====================================================== SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:DB.mdb";User ID=Admin;Password=')...表名 ------------------------------------------------------------------------------------------------- 2.         将access导入SQL server -- ==================================......

阅读全文(2653) | 评论:0

SQL Server存储过程编程经验技巧(2005-12-29 23:16:00)

摘要:  1、使用OUTPUT类型参数的存储过程的技巧   一般的存储过程都是直接返回一段记录集给调用者,但是有的时候我们只需要一些存储过程返回的一些参数的值,这时候可以指定存储过程的OUTPUT参数,比如:   Create procedure GetName   @uid nvarchar(1),   @usernam nvarchar(10)='' output   AS   set @username='hongchao'   GO   在上面的存储过程当中我们传递进的参数是@uid,而参数@username则在调有的时候不需要传递进去。这样,存储过程会返回给我们参数@username的值是‘hongchao’。上面的都比较的容易,需要注意的是,当在SQL2000中的时候,如果你的存储过程只有一个参数,并且这个参数是OUTPUT类型的,你必须在调用这个存储过程的时候给这个参数一个初始的值,否则会出现调用错误的情况!   2、在存储过程中的书写注意事项   这一点在SQLServer7.0和SQLServer2000中有些地方是不一样的,也不   知道是不是微软的遗漏,那就是有些系统的关键字在不同的版本之间有所不同,比如关键字level,同样的一句话:   select * from users where level=1   在SQLServer7当中的存储过程当中运行没有丝毫的问题,但是到了SQLServer2000当中则会出现运行的错误,原因就是在于在SQLServer2000中“level”被当作了关键字(奇怪的是SQL7当中也同样是关键字,却没问题),所以在SQL2000当中,上面的语句应当改为:   select * from users where [level]=1   从上面的例子中我们可以看到,在你编写存储过程的时候,最好在有可能和系统关键字的地方使用“[”和“]”将他包围起来,以避免在移植过程中出现的运行错误问题。   3、在存储过程中使用系统存储过程SP_Executesql的注意事项   我们在编写自己的存储过程的时候,往往在很多的情况下,会使用到系统的存储过程SP_Execute。但是需要的注意的是,如果你在这个存储过程的参数(一般是一段SQL语句)当中进行了临时Table的操作,那末对于调用......

阅读全文(3460) | 评论:0

IT人士打死也不能犯的10个错误(2005-12-16 09:19:00)

摘要:1.不要比你的老板穿得更好

  如果你碰巧遇见一个极其没有品位的老板,喜欢穿着劣质西服到处向别人炫耀这是名牌时,我就建议你买块布找个土裁缝做件衣服得了。忠告你,不要试图用你自己的现身说法去影响老板的品位,你应该明白这个看上去像个土老冒的家伙之所以成为你的老板,肯定不是因为他会打扮的原因。说不定,他讨厌像奶油小生似的男人 。

  2.不要试图与老板的女秘书调情

  你这样在老板眼皮下面轻举妄动,简直无异于自寻死路;即使你的老板和他的秘书之间的关系像办公室里的桶装纯净水一样透明无瑕,你也别忽略一个正常男人对异性的占有欲和对同性的嫉妒与敌意,就像你在大街上看见一个超级美女被一个臭男人拥抱着的时候,你一样也会心中暗骂:哼,这走运的臭小子 !

  3.捐钱不要超过你的上级

  在一些社会活动中,比如政府、工会号召向某灾区捐钱捐物。如果你的上级捐了100元,你最好最多捐85元。如果你想捐得更多,你可以用其他方式嘛!其中道理一想就知道了。

  4.不要跟你的同事谈恋爱

  因为你只是个正常男人,所以你就很难做到对你的情侣视而不见,这造成的直接后果就是:即使你工作勤勤恳恳得像只老黄牛,你的老板也会怀疑你的上班时间是不是都在谈恋爱了。别抱怨老板的胡乱猜疑,站在他的位置上,你一样也会这么想。如果你真的与你的某位同事陷入爱河,那你们看上去只有两条路可走,要么你离开公司,要么你的爱人离开公司。

  5.不要说黄色笑话

  你要明白这种爱好与幽默无关。虽然你把你的女同事逗得喜笑颜开,但她极有可能转过身去对自己说:天那,这个家伙真无耻!连这种话都能说的出来!

  6.不要跟你的同事交朋友

  虽然把同事想象成你的"假想敌"的做法有些过分,但至少能使你防止某些糟糕的办公室纠纷的发生,就把他们当成一群你可以叫得出名字的陌生人好了。永远永远都不要推心置腹地把你的隐私告诉同事,这就好像在你身边埋了一颗地雷,没爆炸的时候风平浪静,可假如有一天爆炸了,你就彻底死定了。一个同事的杀伤力比一个亲密朋友的杀伤力厉害多了,最起码,你的密友不认识你的老板是谁。

  7.不要露骨地拍老板的马屁

  如果他不是个白痴的话,他会明白,你只是在......

阅读全文(2304) | 评论:0

IT人该怎么样保健?(2005-11-16 11:35:00)

摘要:IT族人长时间精力集中于屏幕,而电脑屏幕亮度长时间不变,字迹密集,加上光线不合适等因素,容易引起视觉疲劳。如果工作过程中不注意调节视力,就会造成眼睛疲劳以及视力下降。同时,电脑操作人员长时间从事数据输入、键盘打印,反复单一动作幅度变化小,需要相当大的静态支持力,时间长久就引起手、腕、臂甚至肩部的肌腱发炎、疼痛,有时可累及腱鞘和肌肉组织。

电磁辐射之害

  症状:显示器热度过高,在工作时就会有相当多的电磁辐射,它会使空气发生电离作用,不断产生正电荷(正离子),并不断与空气中的负离子中和,导致负离子的含量几乎为零,长期处于正离子过多的环境中,使人失眠、免疫力下降、女性内分泌紊乱等。
  宝典:仔细地打扫办公环境;多喝茶;不要把自己显示器的后面对着同事的后脑或者身体的侧面;常喝绿茶;勤洗脸;在电脑桌下摆放一盆植物或水,可以吸收电脑所发出的电磁波;尽量使用液晶显示器。

长期处在灰尘场

  症状:皮肤过敏。处于开机状态的显示器周围会形成一个静电场,它差不多会把整个房间的空气中悬浮的灰尘吸入自己的场中,从而使得面部皮肤受到刺激,会出现过敏起疹等现象。
  宝典:不要在电脑周围摆放堆积如山的纸和文件;电脑桌表面用湿布蘸着抗静电剂擦拭;经常开窗通风;在电脑桌上摆放一盆仙人掌,因为仙人掌的针刺能够吸收灰尘;经常清洁键盘,使用键盘时及使用后应先洗手再进食,不使用时用布将键盘遮盖。

干眼症与电脑眼病

  症状:虽然肉眼无法看出来,但事实上显示器上的画面是一直在闪烁的。看显示器时,我们往往会长时间地盯着某一个点,很少眨眼,因此眼肌容易疲劳,眼黏膜发干,眼睛发红、发炎、疼痛。在电脑前不间断工作4小时后,几乎所有人的眼睛都会出现酸痛和沙眼的感觉。
  宝典:距显示器需要70厘米以上;把亮度调整到不使眼疲劳的程度;避免室内的光线直接照射在屏幕上而产生干扰光线;使用电脑时滴一些与我们眼泪成分相同的眼药水;眼睛疲劳时,用以淡红茶水煮过的湿巾敷几分钟眼睛,会很快消除充血和疲劳。在荧光屏前工作时间过长,视网膜上的视紫红质会被消耗掉,而视紫红质主要由维生素A合成。因此应多吃些胡萝卜、白菜、豆芽、豆腐、红枣、橘子以及牛奶、鸡蛋、动物肝脏、瘦肉等食物,以补充人体内维生素A和蛋白质。

恐怖鼠标手......

阅读全文(2294) | 评论:0

考试作弊--超级版(2005-11-16 10:18:00)

摘要:高中时一次政治考试,最后一排一男生将课本摊在大腿上奋笔疾书,不料监考如乱马般悄无声息绕到其后,轻抚其肩。该生惊觉,面不改色曰∶对不起,桌肚里东西太多,放不下,只好让它待在腿上。随即低头继续疾书。全班倒。   高中同学抄书   发现题目有歧义,就拿课本和老师理论   老师过了3分钟才反应过来,叹息不已。   初中时隔壁的女同学在一次生物科考试中把书扔在地上,用脚趾翻书抄,偶一直很pf她的眼力和脚趾的灵活性。   女生把字写在大腿上,被监考得男老师看见了,叫她站起来,就是不敢叫她把裙子翻起来,结果那个女生考了第一   我有个同学大学考英语,他买了一盒绣花针,然后把老师所说的考试内容刻提前刻在了书桌上(我们的书桌是那种发亮的硬板),正正的看是看不到的,只能斜着看才能看到,他刻了一下午,刻钝了N 个针,最后手都麻木了,然后扔了一本书在桌子上占座。我想那张课桌会成为以后师弟、师妹们抢占的一张。   我最赚的一次是什么也没有准备,一心以为要死定了!已经准备好重修费了!!来到考场坐着发呆!结果监考老师要求大家换位子,我到新的位子坐下一看!!哇哈哈哈哈哈哈哈哈!!所有的答案都抄在桌子上,而且抄的很全!!四处张望一下,发现一位兄弟正双眼喷火的盯着我!!哈哈哈哈,结果这门课就顺利通过!!   有一次做梦梦见我在考试,吓的我心惊肉跳,醒过来发现自己果然在考试!   上次考试,前面的老兄8会便拿出纸团抓阄。他抓了又抓老师过来问他干什么,他反问:“难道不要验算吗?”   某达人考试时一直睡觉,然后快下考时醒了 左右看了看,发现后面同学的卷子做完了还没写名字 顺手拿过来写上自己名字交了。。。   考试时,因为看别人的太投入了, 老师过来问我:“你们**老师还好吧?”   我居然答他:“还行” 结果,一个记过.   一次考金工实习(补考),考试中偶们狂抄,交卷时监考老师给偶们检查考卷,指出偶们的错误,当场修改,结果偶们最低85分,可是考试前每人交给监考老师3 0元(美其名曰:补考费)。   两同学,挺像!   物理考试进行到65分钟,一人交卷,然后,一人上wc,交卷的人继续进来考试!   考珠算。一哥们拿了个计算器,结果被没收了。老师照顾他,下一堂继续考。这B回宿舍找了个巨大的又进去。结果,据说在考到一半的时候这B 大吼一声——“妈个B,坏的!”   初二时,......

阅读全文(2299) | 评论:0

C# 编码规范(2005-11-10 09:05:00)

摘要:在已经开始的项目实践中使用,规范参考了文章《C# 编码规范和编程好习惯》(http://www.huihoo.com/one_and_net/C%23-code.html) 需要说明的有: ü         有些地方拼写错误,我做了改正 ü         有个别地方认为不合适的,做了点删节 ü         总体来说,命名规范并没有强制的要求,统一即可。如花括弧是否需独立一行的问题。 ü         对于3中的“使用C# 或 VB.NET的特有类型,而不是System命名空间中定义的别名类型”情况,C#语言规范中是推荐的,但Jeffrey Richter在他的《Applied Microsoft .NET Framework Programming》中并不提倡,理由是不同语言中一个关键字可能被映射成不同的FCL类型。这里偶还是倾向于前者。 1       命名和规范
首先定义: Pascal 大小写形式-所有单词第一个字母大写,其他字母小写。 Camel 大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。   1.1    类名使用Pascal 大小写形式
public class HelloWorld {  ... } 1.2    接口的命名一般都以I开头
public interface IXX 1.3    方法使用Pascal 大小写形式
public class HelloWorld {  void SayHello(string name)  {   ...  } } 1.4    变量和方法参数使用Cam......

阅读全文(2843) | 评论:0