Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
²ÎÊý»¯²éѯΪʲôÄܹ»·ÀÖ¹SQL×¢Èë
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-05
  2054  次浏览      37
 

Èκζ¯Ì¬µÄÖ´ÐÐSQL ¶¼ÓÐ×¢ÈëµÄ·çÏÕ£¬ÒòΪ¶¯Ì¬Òâζ×Ų»ÖØÓÃÖ´Ðмƻ®£¬¶øÈç¹û²»ÖØÓÃÖ´Ðмƻ®µÄ»°£¬ÄÇô¾Í»ù±¾ÉÏÎÞ·¨±£Ö¤ÄãдµÄSQLËù±íʾµÄÒâ˼¾ÍÊÇÄãÒª±í´ïµÄÒâ˼¡£

ºÜ¶àÈ˶¼ÖªµÀSQL×¢È룬Ҳ֪µÀSQL²ÎÊý»¯²éѯ¿ÉÒÔ·ÀÖ¹SQL×¢È룬¿ÉΪʲôÄÜ·ÀÖ¹×¢ÈëÈ´²¢²»ÊǺܶàÈ˶¼ÖªµÀµÄ¡£

±¾ÎÄÖ÷Òª½²ÊöµÄÊÇÕâ¸öÎÊÌ⣬ҲÐíÄãÔÚ²¿·ÖÎÄÕÂÖп´µ½¹ýÕâ¿éÄÚÈÝ£¬µ±È»ÁË¿´¿´Ò²ÎÞ·Á¡£

Ê×ÏÈ£ºÎÒÃÇÒªÁ˽âSQLÊÕµ½Ò»¸öÖ¸ÁîºóËù×öµÄÊÂÇ飺

¾ßÌåϸ½Ú¿ÉÒԲ鿴ÎÄÕ£ºSql Server ±àÒë¡¢ÖØ±àÒëÓëÖ´Ðмƻ®ÖØÓÃÔ­Àí

ÔÚÕâÀÎÒ¼òµ¥µÄ±íʾΪ£º ÊÕµ½Ö¸Áî -> ±àÒëSQLÉú³ÉÖ´Ðмƻ® ->Ñ¡ÔñÖ´Ðмƻ® ->Ö´ÐÐÖ´Ðмƻ®¡£

¾ßÌå¿ÉÄÜÓе㲻һÑù£¬µ«´óÖµIJ½ÖèÈçÉÏËùʾ¡£

½Ó×ÅÎÒÃÇÀ´·ÖÎöΪʲôƴ½ÓSQL ×Ö·û´®»áµ¼ÖÂSQL×¢ÈëµÄ·çÏÕÄØ£¿

Ê×ÏÈ´´½¨Ò»ÕűíUsers:

CREATE TABLE [dbo].[Users](  
 
[Id] [uniqueidentifier] NOT NULL,  
 
[UserId] [int] NOT NULL,  
 
[UserName] [varchar](50) NULL,  
 
[Password] [varchar](50) NOT NULL,  
 
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED   
(   
[Id] ASC 
 
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE 
 = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  
= ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
 
) ON [PRIMARY] 

 

²åÈëһЩÊý¾Ý£º

INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),1,'name1','pwd1');  
INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),2,'name2','pwd2');  
INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),3,'name3','pwd3');  
INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),4,'name4','pwd4');  
INSERT INTO [Test].[dbo].[Users]([Id],[UserId],[UserName],[Password])VALUES (NEWID(),5,'name5','pwd5'); 

¼ÙÉèÎÒÃÇÓиöÓû§µÇ¼µÄÒ³Ãæ£¬´úÂëÈçÏ£º

ÑéÖ¤Óû§µÇ¼µÄsql ÈçÏ£º

select COUNT(*) from Users where Password = 'a' and UserName = 'b'  

Õâ¶Î´úÂë·µ»ØPassword ºÍUserName¶¼Æ¥ÅäµÄÓû§ÊýÁ¿£¬Èç¹û´óÓÚ1µÄ»°£¬ÄÇô¾Í´ú±íÓû§´æÔÚ¡£

±¾ÎIJ»ÌÖÂÛSQL ÖеÄÃÜÂë²ßÂÔ£¬Ò²²»ÌÖÂÛ´úÂë¹æ·¶£¬Ö÷ÒªÊǽ²ÎªÊ²Ã´Äܹ»·ÀÖ¹SQL×¢È룬ÇëһЩͬѧ²»Òª¾À½áÓëijЩ´úÂ룬»òÕߺÍSQL×¢ÈëÎ޹صÄÖ÷Ìâ¡£

¿ÉÒÔ¿´µ½Ö´Ðнá¹û£º

Õâ¸öÊÇSQL profile ¸ú×ÙµÄSQL Óï¾ä¡£

×¢ÈëµÄ´úÂëÈçÏ£º

select COUNT(*) from Users where Password = 'a' and UserName = 'b' or 1=1¡ª'
ÕâÀïÓÐÈ˽«UserNameÉèÖÃΪÁË ¡°b' or 1=1 ¨C¡±.

ʵ¼ÊÖ´ÐеÄSQL¾Í±ä³ÉÁËÈçÏ£º

¿ÉÒÔºÜÃ÷ÏԵĿ´µ½SQL×¢Èë³É¹¦ÁË¡£

ºÜ¶àÈ˶¼ÖªµÀ²ÎÊý»¯²éѯ¿ÉÒÔ±ÜÃâÉÏÃæ³öÏÖµÄ×¢ÈëÎÊÌ⣬±ÈÈçÏÂÃæµÄ´úÂ룺

class Program  
{  
    private static string connectionString = "Data Source=.;Initial Catalog=Test;Integrated Security=True";  
 
    static void Main(string[] args)  
    {  
        Login("b", "a");  
        Login("b' or 1=1--", "a");  
    }  
 
    private static void Login(string userName, string password)  
    {  
        using (SqlConnection conn = new SqlConnection(connectionString))  
        {  
            conn.Open();  
            SqlCommand comm = new SqlCommand();  
            comm.Connection = conn;  
            //ΪÿһÌõÊý¾ÝÌí¼ÓÒ»¸ö²ÎÊý  
            comm.CommandText = "select COUNT(*) from Users where Password 
= @Password and UserName = @UserName";  
            comm.Parameters.AddRange(  
            new SqlParameter[]{                          
                new SqlParameter("@Password", SqlDbType.VarChar) { Value = password},  
                new SqlParameter("@UserName", SqlDbType.VarChar) { Value = userName},  
            });  
 
            comm.ExecuteNonQuery();  
        }  
    }  
} 

ʵ¼ÊÖ´ÐеÄSQL ÈçÏÂËùʾ£º

xec sp_executesql N'select COUNT(*) from Users where Password
 = @Password and UserName 
= @UserName',N'@Password varchar(1),@UserName varchar(1)',@Password='a',@UserName='b' 
 
exec sp_executesql N'select COUNT(*) from Users where Password 
= @Password and UserName 
= @UserName',N'@Password varchar(1),@UserName varchar(11)',@Password='a',@UserName='b'' or 1=1¡ª' 

¿ÉÒÔ¿´µ½²ÎÊý»¯²éѯÖ÷Òª×öÁËÕâЩÊÂÇ飺

1£º²ÎÊý¹ýÂË£¬¿ÉÒÔ¿´µ½ @UserName='b'' or 1=1¡ª'

2£ºÖ´Ðмƻ®ÖØÓÃ

ÒòΪִÐмƻ®±»ÖØÓã¬ËùÒÔ¿ÉÒÔ·ÀÖ¹SQL×¢Èë¡£

Ê×ÏÈ·ÖÎöSQL×¢ÈëµÄ±¾ÖÊ£¬

Óû§Ð´ÁËÒ»¶ÎSQL ÓÃÀ´±íʾ²éÕÒÃÜÂëÊÇaµÄ£¬Óû§ÃûÊÇbµÄËùÓÐÓû§µÄÊýÁ¿¡£

ͨ¹ý×¢ÈëSQL£¬Õâ¶ÎSQLÏÖÔÚ±íʾµÄº¬ÒåÊDzéÕÒ(ÃÜÂëÊÇaµÄ£¬²¢ÇÒÓû§ÃûÊÇbµÄ£¬) »òÕß1=1 µÄËùÓÐÓû§µÄÊýÁ¿¡£

¿ÉÒÔ¿´µ½SQLµÄÓïÒâ·¢ÉúÁ˸ı䣬Ϊʲô·¢ÉúÁ˸ıäÄØ£¿£¬ÒòΪûÓÐÖØÓÃÒÔǰµÄÖ´Ðмƻ®£¬ÒòΪ¶Ô×¢ÈëºóµÄSQLÓï¾äÖØÐ½øÐÐÁ˱àÒ룬ÒòÎªÖØÐÂÖ´ÐÐÁËÓï·¨½âÎö¡£ËùÒÔÒª±£Ö¤SQLÓïÒå²»±ä£¬¼´ÎÒÏëÒª±í´ïSQL¾ÍÊÇÎÒÏë±í´ïµÄÒâ˼£¬²»ÊDZðµÄ×¢ÈëºóµÄÒâ˼£¬¾ÍÓ¦¸ÃÖØÓÃÖ´Ðмƻ®¡£

Èç¹û²»Äܹ»ÖØÓÃÖ´Ðмƻ®£¬ÄÇô¾ÍÓÐSQL×¢ÈëµÄ·çÏÕ£¬ÒòΪSQLµÄÓïÒâÓпÉÄÜ»á±ä»¯£¬Ëù±í´ïµÄ²éѯ¾Í¿ÉÄܱ仯¡£

ÔÚSQL Server ÖвéѯִÐмƻ®¿ÉÒÔʹÓÃÏÂÃæµÄ½Å±¾£º

DBCC FreeProccache  
 
select total_elapsed_time / execution_count ƽ¾ùʱ¼ä,total_logical_reads/execution_count Âß¼­¶Á,  
usecounts ÖØÓôÎÊý,SUBSTRING(d.text, (statement_start_offset/2) + 1,  
         ((CASE statement_end_offset   
          WHEN -1 THEN DATALENGTH(text)  
          ELSE statement_end_offset END   
            - statement_start_offset)/2) + 1) Óï¾äÖ´ÐÐ from sys.dm_exec_cached_plans a  
cross apply sys.dm_exec_query_plan(a.plan_handle) c  
,sys.dm_exec_query_stats b  
cross apply sys.dm_exec_sql_text(b.sql_handle) d  
--where a.plan_handle=b.plan_handle and total_logical_reads/execution_count>4000  
ORDER BY total_elapsed_time / execution_count DESC; 

ÔÚÕâÆªÎÄÕÂÖÐÓÐÕâôһ¶Î£º

ÕâÀï×÷ÕßÓÐÒ»¾ä»°£º¡±²»¹ýÕâÖÖд·¨ºÍÖ±½ÓÆ´SQLÖ´ÐÐûɶʵÖÊÐÔµÄÇø±ð¡±

ÈÎºÎÆ´½ÓSQLµÄ·½Ê½¶¼ÓÐSQL×¢ÈëµÄ·çÏÕ£¬ËùÒÔÈç¹ûûÓÐʵÖÊÐÔµÄÇø±ðµÄ»°£¬ÄÇôʹÓÃexec ¶¯Ì¬Ö´ÐÐSQLÊDz»ÄÜ·ÀÖ¹SQL×¢ÈëµÄ¡£

±ÈÈçÏÂÃæµÄ´úÂ룺

private static void TestMethod()  
{  
    using (SqlConnection conn = new SqlConnection(connectionString))  
    {  
        conn.Open();  
        SqlCommand comm = new SqlCommand();  
        comm.Connection = conn;  
        //ʹÓÃexec¶¯Ì¬Ö´ÐÐSQL¡¡  
        //ʵ¼ÊÖ´ÐеIJéѯ¼Æ»®Îª(@UserID varchar(max))select * from Users(nolock) where UserID in (1,2,3,4)  
        //²»ÊÇÔ¤ÆÚµÄ(@UserID varchar(max))exec('select * from Users(nolock) where UserID in ('+@UserID+')')      
        comm.CommandText = "exec('select * from Users(nolock) where UserID in ('+@UserID+')')";  
        comm.Parameters.Add(new SqlParameter("@UserID", SqlDbType.VarChar, -1) { Value = "1,2,3,4" });  
        //comm.Parameters.Add(new SqlParameter("@UserID", SqlDbType.VarChar, -1)
 { Value = "1,2,3,4); delete from Users;--" });  
        comm.ExecuteNonQuery();  
    }  
} 

Ö´ÐеÄSQL ÈçÏ£º

exec sp_executesql N'exec(''select * from Users(nolock) where UserID in 
(''+@UserID+'')'')',N'@UserID varchar(max) ',@UserID='1,2,3,4' 

¿ÉÒÔ¿´µ½SQLÓï¾ä²¢Ã»ÓвÎÊý»¯²éѯ¡£

Èç¹ûÄ㽫UserIDÉèÖÃΪ¡±

1,2,3,4); delete from Users;¡ª-

¡±,ÄÇôִÐеÄSQL¾ÍÊÇÏÂÃæÕâÑù£º

exec sp_executesql N'exec(''select * from Users(nolock) where UserID in
 (''+@UserID+'')'')',N'@UserID varchar(max) ',@UserID='1,2,3,4); delete from Users;--' 

²»ÒªÒÔΪ¼ÓÁ˸ö@UserID ¾Í´ú±íÄܹ»·ÀÖ¹SQL×¢È룬ʵ¼ÊÖ´ÐеÄSQL ÈçÏ£º

Èκζ¯Ì¬µÄÖ´ÐÐSQL ¶¼ÓÐ×¢ÈëµÄ·çÏÕ£¬ÒòΪ¶¯Ì¬Òâζ×Ų»ÖØÓÃÖ´Ðмƻ®£¬¶øÈç¹û²»ÖØÓÃÖ´Ðмƻ®µÄ»°£¬ÄÇô¾Í»ù±¾ÉÏÎÞ·¨±£Ö¤ÄãдµÄSQLËù±íʾµÄÒâ˼¾ÍÊÇÄãÒª±í´ïµÄÒâ˼¡£

Õâ¾ÍºÃÏñСʱºòµÄÌî¿ÕÌ⣬²éÕÒÃÜÂëÊÇ(____) ²¢ÇÒÓû§ÃûÊÇ(____)µÄÓû§¡£

²»¹ÜÄãÌîµÄÊÇʲôֵ£¬ÎÒËù±í´ïµÄ¾ÍÊÇÕâ¸öÒâ˼¡£

×îºóÔÙ×ܽáÒ»¾ä£ºÒòΪ²ÎÊý»¯²éѯ¿ÉÒÔÖØÓÃÖ´Ðмƻ®£¬²¢ÇÒÈç¹ûÖØÓÃÖ´Ðмƻ®µÄ»°£¬SQLËùÒª±í´ïµÄÓïÒå¾Í²»»á±ä»¯£¬ËùÒԾͿÉÒÔ·ÀÖ¹SQL×¢Èë,Èç¹û²»ÄÜÖØÓÃÖ´Ðмƻ®£¬¾ÍÓпÉÄܳöÏÖSQL×¢È룬´æ´¢¹ý³ÌÒ²ÊÇÒ»ÑùµÄµÀÀí£¬ÒòΪ¿ÉÒÔÖØÓÃÖ´Ðмƻ®¡£

   
2054 ´Îä¯ÀÀ       37
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí