<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>幻想曲.Net &#187; sql</title>
	<atom:link href="http://yibin.us/tag/sql/feed" rel="self" type="application/rss+xml" />
	<link>http://yibin.us</link>
	<description>面朝大海，春暖花开</description>
	<lastBuildDate>Fri, 17 Jun 2011 01:57:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SQL Server 管理常用的SQL和T-SQL</title>
		<link>http://yibin.us/archives/5528</link>
		<comments>http://yibin.us/archives/5528#comments</comments>
		<pubDate>Tue, 08 Aug 2006 16:09:00 +0000</pubDate>
		<dc:creator>幻想曲</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://yibin.us/?p=5528</guid>
		<description><![CDATA[1. 查看数据库的版本 select @@version 常见的几种SQL SERVER打补丁后的版本号: 8.00.194 Microsoft SQL Server 2000 8.00.384 Microsoft SQL Server 2000 SP1 8.00.532 Microsoft SQL Server 2000 SP2 8.00.760 Microsoft SQL Server 2000 SP3 8.00.818 Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031 8.00.2039 Microsoft SQL Server 2000 SP4 2. 查看数据库所在机器操作系统参数 exec master..xp_msver 3. 查看数据库启动的参数 sp_configure 4. 查看数据库启动时间 select [...]]]></description>
			<content:encoded><![CDATA[<p>1. 查看数据库的版本	   <br />select @@version</p>
<p>常见的几种SQL SERVER打补丁后的版本号:</p>
<p>8.00.194   Microsoft SQL Server 2000 <br />8.00.384   Microsoft SQL Server 2000 SP1 <br />8.00.532   Microsoft SQL Server 2000 SP2 <br />8.00.760   Microsoft SQL Server 2000 SP3 <br />8.00.818   Microsoft SQL Server 2000 SP3 w/ Cumulative Patch MS03-031 <br />8.00.2039  Microsoft SQL Server 2000 SP4  </p>
<p>2. 查看数据库所在机器操作系统参数	   <br />exec master..xp_msver</p>
<p>3. 查看数据库启动的参数        <br />sp_configure</p>
<p>4. 查看数据库启动时间        <br />select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1</p>
<p>查看数据库服务器名和实例名<br />print &#8216;Server Name&#8230;&#8230;&#8230;&#8230;&#8230;: &#8216; + convert(varchar(30),@@SERVERNAME)        <br />print &#8216;Instance&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;: &#8216; + convert(varchar(30),@@SERVICENAME)      </p>
<p>5. 查看所有数据库名称及大小	<br />sp_helpdb</p>
<p>重命名数据库用的SQL<br />sp_renamedb &#8216;old_dbname&#8217;, &#8216;new_dbname&#8217;</p>
<p>6. 查看所有数据库用户登录信息	<br />sp_helplogins</p>
<p>查看所有数据库用户所属的角色信息	   <br />sp_helpsrvrolemember</p>
<p>修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程</p>
<p>更改某个数据对象的用户属主<br />sp_changeobjectowner [@objectname =] &#8216;object&#8217;, [@newowner =] &#8216;owner&#8217;</p>
<p>注意: 更改对象名的任一部分都可能破坏脚本和存储过程。</p>
<p>把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本</p>
<p>查看某数据库下,对象级用户权限<br />sp_helprotect</p>
<p>7. 查看链接服务器	       <br />sp_helplinkedsrvlogin</p>
<p>查看远端数据库用户登录信息	   <br />sp_helpremotelogin</p>
<p>8.查看某数据库下某个数据对象的大小<br />sp_spaceused @objname</p>
<p>还可以用sp_toptables过程看最大的N(默认为50)个表</p>
<p>查看某数据库下某个数据对象的索引信息<br />sp_helpindex @objname</p>
<p>还可以用SP_NChelpindex过程查看更详细的索引情况<br />SP_NChelpindex @objname</p>
<p>clustered索引是把记录按物理顺序排列的，索引占的空间比较少。 <br />对键值DML操作十分频繁的表我建议用非clustered索引和约束，fillfactor参数都用默认值。</p>
<p>查看某数据库下某个数据对象的的约束信息<br />sp_helpconstraint @objname</p>
<p>9.查看数据库里所有的存储过程和函数<br />use @database_name<br />sp_stored_procedures</p>
<p>查看存储过程和函数的源代码<br />sp_helptext &#8216;@procedure_name&#8217;</p>
<p>查看包含某个字符串@str的数据对象名称<br />select distinct object_name(id) from syscomments where text like &#8216;%@str%&#8217;</p>
<p>创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数</p>
<p>解密加密过的存储过程和函数可以用sp_decrypt过程</p>
<p>10.查看数据库里用户和进程的信息<br />sp_who</p>
<p>查看SQL Server数据库里的活动用户和进程的信息<br />sp_who &#8216;active&#8217;</p>
<p>查看SQL Server数据库里的锁的情况<br />sp_lock</p>
<p>进程号1&#8211;50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.</p>
<p>spid是进程编号,dbid是数据库编号,objid是数据对象编号</p>
<p>查看进程正在执行的SQL语句<br />dbcc inputbuffer ()</p>
<p>推荐大家用经过改进后的sp_who3过程可以直接看到进程运行的SQL语句<br />sp_who3</p>
<p>检查死锁用sp_who_lock过程<br />sp_who_lock	   	</p>
<p>11.查看和收缩数据库日志文件的方法</p>
<p>查看所有数据库日志文件大小          <br />dbcc sqlperf(logspace)</p>
<p>如果某些日志文件较大，收缩简单恢复模式数据库日志，收缩后@database_name_log的大小单位为M<br />backup log @database_name with no_log<br />dbcc shrinkfile (@database_name_log, 5)</p>
<p>12.分析SQL Server SQL 语句的方法:</p>
<p>set statistics time {on | off}</p>
<p>set statistics io {on | off}</p>
<p>图形方式显示查询执行计划</p>
<p>在查询分析器-&gt;查询-&gt;显示估计的评估计划(D)-Ctrl-L	或者点击工具栏里的图形</p>
<p>文本方式显示查询执行计划</p>
<p>set showplan_all {on | off}</p>
<p>set showplan_text { on | off }</p>
<p>set statistics profile { on | off }</p>
<p>13.出现不一致错误时，NT事件查看器里出3624号错误，修复数据库的方法</p>
<p>先注释掉应用程序里引用的出现不一致性错误的表，然后在备份或其它机器上先恢复然后做修复操作</p>
<p>alter database [@error_database_name] set single_user</p>
<p>修复出现不一致错误的表</p>
<p>dbcc checktable(&#8216;@error_table_name&#8217;,repair_allow_data_loss)</p>
<p>或者可惜选择修复出现不一致错误的小型数据库名</p>
<p>dbcc checkdb(&#8216;@error_database_name&#8217;,repair_allow_data_loss)</p>
<p>alter database [@error_database_name] set multi_user</p>
<p>CHECKDB 有3个参数:</p>
<p>repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误，<br />以及删除已损坏的文本对象，这些修复可能会导致一些数据丢失。<br />修复操作可以在用户事务下完成以允许用户回滚所做的更改。<br />如果回滚修复，则数据库仍会含有错误，应该从备份进行恢复。<br />如果由于所提供修复等级的缘故遗漏某个错误的修复，则将遗漏任何取决于该修复的修复。<br />修复完成后，请备份数据库。 </p>
<p>repair_fast 进行小的、不耗时的修复操作，如修复非聚集索引中的附加键。<br />这些修复可以很快完成，并且不会有丢失数据的危险。 </p>
<p>repair_rebuild 执行由 repair_fast 完成的所有修复，包括需要较长时间的修复（如重建索引）。<br />执行这些修复时不会有丢失数据的危险。 <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;    </p>
<p>有兴趣还可以看看源自www.sqlservercentral.com的检查SQL Server全部信息的sqlserver_all_aspect脚本		   </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;  </p>
]]></content:encoded>
			<wfw:commentRss>http://yibin.us/archives/5528/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>预防SQL注入真的那么复杂么?</title>
		<link>http://yibin.us/archives/5492</link>
		<comments>http://yibin.us/archives/5492#comments</comments>
		<pubDate>Fri, 07 Jul 2006 03:28:00 +0000</pubDate>
		<dc:creator>幻想曲</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[注入]]></category>

		<guid isPermaLink="false">http://yibin.us/?p=5492</guid>
		<description><![CDATA[在csdn社区又见这样的帖子 asp.net里如何防 &#8216;or&#8217;='or&#8217; 在线等待~~ 什么是SQL注入这里就不多讲了网络上很多文章都对这个做了很深刻的讲解 个人认为防止SQL注入有以下三种方法1、过滤敏感字符2、在ASP.Net中使用SqlParameters3、用存储过程 过滤敏感字符这里的敏感字符是指单引&#8216;在原来的ASP程序中,待执行的SQL语句一般都是经过”拼凑”而形成的 只需把一个单引替换成二个单引即&#8216;=======&#62;&#8216; &#8216;不需要像网上某些文章里说的替换Delete/Drop/Alter&#8230;&#8230;诸如: ParaValue = replace(ParaValue,"'","") ParaValue = replace(ParaValue,"select ","") ParaValue = replace(ParaValue,"insert ","") ParaValue = replace(ParaValue,"delete ","") ParaValue = replace(ParaValue,"count(","") ParaValue = replace(ParaValue,"drop table ","") ParaValue = replace(ParaValue,"update ","") ParaValue = replace(ParaValue,"truncate ","") ParaValue = replace(ParaValue,"asc(","") ParaValue = replace(ParaValue,"mid(","") ParaValue = replace(ParaValue,"char(","") ParaValue = replace(ParaValue,"xp_cmdshell","") ParaValue = replace(ParaValue,"exec [...]]]></description>
			<content:encoded><![CDATA[<p>在csdn社区又见这样的帖子</p>
<p><a href="http://community.csdn.net/Expert/TopicView1.asp?id=4856229" target="_blank">asp.net里如何防 &#8216;or&#8217;='or&#8217; 在线等待~~</a></p>
<p>什么是SQL注入这里就不多讲了<br />网络上很多文章都对这个做了很深刻的讲解</p>
<p>个人认为防止SQL注入有以下三种方法<br />1、过滤敏感字符<br />2、在ASP.Net中使用SqlParameters<br />3、用存储过程</p>
<p><b>过滤敏感字符</b><br />这里的敏感字符是指单引<b>&#8216;</b><br />在原来的ASP程序中,待执行的SQL语句一般都是经过”拼凑”而形成的</p>
<p><font color="red">只需把一个单引替换成二个单引</font><br />即<b>&#8216;</b>=======&gt;<b>&#8216; &#8216;</b><br />不需要像网上某些文章里说的<br />替换Delete/Drop/Alter&#8230;&#8230;<br />诸如:<br /><code><br />
ParaValue = replace(ParaValue,"'","")<br />
ParaValue = replace(ParaValue,"select ","")<br />
ParaValue = replace(ParaValue,"insert ","")<br />
ParaValue = replace(ParaValue,"delete ","")<br />
ParaValue = replace(ParaValue,"count(","")<br />
ParaValue = replace(ParaValue,"drop table ","")<br />
ParaValue = replace(ParaValue,"update ","")<br />
ParaValue = replace(ParaValue,"truncate ","")<br />
ParaValue = replace(ParaValue,"asc(","")<br />
ParaValue = replace(ParaValue,"mid(","")<br />
ParaValue = replace(ParaValue,"char(","")<br />
ParaValue = replace(ParaValue,"xp_cmdshell","")<br />
ParaValue = replace(ParaValue,"exec master","")<br />
ParaValue = replace(ParaValue,"net localgroup administrators","")<br />
ParaValue = replace(ParaValue," and ","")<br />
ParaValue = replace(ParaValue,"net user","")<br />
ParaValue = replace(ParaValue," or ","")
</pre>
<p>借用csdn上一句话：替换这的纯属不懂装懂。有必要这么复杂么?这样做只能说明你根本不了解什么叫SQl注入。<br />只需替换单引即可</p>
<p><b>asp.net中使用Parameters即可,无需对数据做任何的操作</b><br />comm.Paremeters.Add("@userName",SqlDbType.varchar).Value=Textbox1.text;<br />comm.Paremeters.Add("@passWord",SqlDbType.varchar).Value=Textbox2.text;<br />comm.commandText="select * from AdminInfo where UserName=@userName and PassWord=@passWord";</p>
<p><b>存储过程</b><br />因为在存储过程中就可以设置变量的类型,所以也无需对数据做任何操作</p>
<p>再次拜托,不要把SQL注入说得天花乱坠,真的很不专业</p>
]]></content:encoded>
			<wfw:commentRss>http://yibin.us/archives/5492/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

