SQL Server問題集錦

來源:互聯網
上載者:User

一看ping 伺服器IP能否ping通.
這個實際上是看和遠程sql server 2000伺服器的物理串連是否存在。如果不行,請檢查網路,查看配置,當然得確保遠程sql server 2000伺服器的IP拼字正確.
二 在Dos或命令列下輸入telnet 伺服器IP 連接埠,看能否連通。
如telnet 202.114.100.100 1433
通常連接埠值是1433,因為1433是sql server 2000的對於Tcp/IP的預設偵聽連接埠。如果有問題,通常這一步會出問題。通常的提示是“……無法開啟串連,串連失敗"。如果這一步有問題,應該檢查以下選項.
1 檢查遠程伺服器是否啟動了sql server 2000服務。如果沒有,則啟動。
2 檢查伺服器端有沒啟用Tcp/IP協議,因為遠端連線(通過網際網路)需要靠這個協議。檢查方法是,在伺服器上開啟 開始菜單->程式->Microsoft SQL Server->伺服器網路工具 + 生產力,看啟用的協議裡是否有tcp/ip協議,如果沒有,則啟用它。
3 檢查伺服器的tcp/ip連接埠是否配置為1433連接埠。仍然在伺服器網路工具 + 生產力裡查看啟用協議裡面的tcp/ip的屬性,確保預設連接埠為1433,並且隱藏伺服器複選框沒有勾上。
事實上,如果預設連接埠被修改,也是可以的,但是在用戶端做telnet測試時,寫伺服器連接埠號碼時必須與伺服器配置的連接埠號碼保持一致。如果隱藏伺服器複選框被勾選,則意味著用戶端無法通過枚舉伺服器來看到這台伺服器,起到了保護的作用,但不影響串連,但是Tcp/ip協議的預設連接埠將被隱式修改為2433,在用戶端串連時必須作相應的改變。
4 如果伺服器端作業系統打過sp2補丁,則要對windows防火牆作一定的配置,要對它開放1433連接埠,通常在測試時可以直接關掉windows防火牆(其他的防火牆也關掉最好)。
5 檢查伺服器是否在1433連接埠偵聽。如果伺服器沒有在tcp串連的1433連接埠偵聽,則是串連不上的。檢查方法是在伺服器的dos或命令列下面輸入
netstat -a -n 或者是netstat -an,在結果清單裡看是否有類似 tcp 127.0.0.1 1433 listening 的項。如果沒有,則通常需要給sql server 2000打上至少sp3的補丁。其實在伺服器端啟動查詢分析器,輸入 select @@version 執行後可以看到版本號碼,版本號碼在8.0.2039以下的都需要打補丁。
如果以上都沒問題,這時你再做telnet 伺服器ip 1433 測試,將會看到螢幕一閃之後游標在左上方不停閃動。恭喜你,你馬上可以開始在企業管理器或查詢分析器串連了。
三 檢查用戶端設定
程式->Microsoft SQL Server -> 用戶端網路使用工具。像在伺服器網路工具 + 生產力裡一樣,確保用戶端tcp/ip協議啟用,並且預設連接埠為1433(或其他連接埠,與伺服器端保持一致就行)。
四 在企業管理器裡或查詢那分析器串連測試
企業管理器->右鍵SQlserver組->建立sqlserver註冊->下一步->寫入遠程IP->下一步->選Sqlserver登陸->下一步->寫入登陸名與密碼(sa,password)->下一步->下一步->完成
查詢分析器->檔案->串連->寫入遠程IP->寫入登入名稱和密碼(sa,password)->確定
通常建議在查詢分析器裡做,因為預設情況下,通過企業管理器註冊另外一台SQL Server的逾時設定是4秒,而查詢分析器是15秒。
修改預設連線逾時的方法:
企業管理器->工具->選項->在彈出的"SQL Server企業管理器屬性"視窗中,點擊"進階"選項卡->串連設定->在 登入逾時(秒) 後面的框裡輸入一個較大的數字
查詢分析器->工具->選項->串連->在 登入逾時(秒) 後面的框裡輸入一個較大的數字通常就可以連通了,如果提示錯誤,則進入下一步。
五 錯誤產生的原因通常是由於SQL Server使用了"僅 Windows"的身分識別驗證方式,因此使用者無法使用SQL Server的登入帳戶(如 sa )進行串連。解決方案如下所示:
1 在伺服器端使用企業管理器,並且選擇"使用 Windows 身分識別驗證"串連上 SQL Server。
2 展開"SQL Server組",滑鼠右鍵點擊SQL Server伺服器的名稱,選擇"屬性",再選擇"安全性"選項卡。
3 在"身分識別驗證"下,選擇"SQL Server和 Windows "。
4 重新啟動SQL Server服務。(在dos或命令列下面net stop mssqlserver停止服務,net start mssqlserver啟動服務,也是一種快捷的方法)。
附註:在串連本機伺服器時,通常使用的是具名管道協議(在伺服器網路工具 + 生產力裡可以看到啟用的協議有這個),預設連接埠是445,因此在本地能連通是不能說明什麼問題的,串連遠程伺服器是完全不同的協議)

SQL Server 2000不能遠端連線的問題
本文主要是針對 SQL Server 2000安裝在 Windows 2003上的問題。
在 Windows 2003下,若sql2000不打補丁,則SQL Server 2000不會監聽1433連接埠,這時,可以在本機上串連資料庫,但無法從其它機器串連。打過SP4補丁後才能遠端連線,有時,打過SP4補丁後,SQL Server 2000 預設監聽的連接埠不是1433,而是2433。
所以,安裝SQL Server 2000後,應該先打 SP4 補丁,打完後,若是無法串連,請用 NetState -an 查看1433連接埠是否被監聽。若監聽的是2433,你可以在用戶端設定SQL Server 的連接埠,也可以用企業管理器,對伺服器點右鍵 => 屬性 => 網路設定 => 點中右邊的 TCP/IP 選擇屬性 即可修改SQL Server 監聽的連接埠。
若是連接埠正常,請檢查 Win2003的防火牆中是不是把1433連接埠開放了。

卸載SQL Server2000後不能再次安裝的問題解決方案?
只要刪除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\下的PendingFileRenameOperations索引值,就可以重新安裝了。
HKEY_LOCAL_MACHINE\system\currentcontrolset\services\下面都是系統存在的服務,刪除相應的項

SQL Server安全性設定
1. 確認已經安裝了NT/2000和SQL Server的最新補丁程式,不用說大家應該已經安裝好了,但是我覺得最好還是在這裡提醒一下。
2. 評估並且選擇一個考慮到最大的安全性但是同時又不影響功能的網路通訊協定。 多協議是明智的選擇, 但是它有時不能在異種的環境中使用。
3. 給 "sa" 和 "probe" 帳戶設定強壯的密碼來加強其安全性。設定一個強壯的密碼並將其儲存在一個安全的地方。 注意: probe帳戶被用來進行效能分析和分發傳輸。 當在標準的安全模態中用的時候 , 給這個帳戶設定高強度的密碼能影響某些功能的使用。
4. 使用一個低特權使用者作為 SQL 伺服器服務的查詢操作賬戶,不要用 LocalSystem 或sa。 這個帳戶應該有最小的權利 ( 注意作為一個服務啟動並執行權利是必須的)和應該包含( 但不停止)在妥協的情況下對伺服器的攻擊。 注意當使用企業管理器做以上設定時 , 檔案,註冊表和使用者權利上的 ACLs同時被處理。
5. 確定所有的 SQL 伺服器資料,而且系統檔案是裝置在 NTFS 分區,且appropraite ACLs 被應用。 如果萬一某人得到對系統的存取操作許可權,該層許可權可以阻止入侵者破壞資料,避免造成一場大災難。
6.如果不使用Xp_cmdshell就關掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 賬戶操作限制非sa使用者使用XP_cmdshell.

 

如果你不需要擴充預存程序xp_cmdshell請把它去掉。使用這個SQL語句:
use master
sp_dropextendedproc 'xp_cmdshell'
xp_cmdshell是進入作業系統的最佳捷徑,是資料庫留給作業系統的一個大後門。如果你需要這個預存程序,請用這個語句也可以恢複過來。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'

將xplog70.dll這個包徹底刪除。當然如果覺得自己還有使用xp_cmdshell的可能,就將這個包改個名字好了~~

解決方案:運行SQLSERVER管理工具,給SA帳號加上強壯密碼,還要在SQL命令列執行:
“if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[xp_cmdshell]) and OBJECTPROPERTY(id, NIsExtendedProc) = 1) exec sp_dropextendedproc N[dbo].[xp_cmdshell] ”
GO
或: “use master sp_dropextendedproc xp_cmdshell”
這樣就算攻擊者獲得SA帳號密碼遠端連線後,也不能調用CMDSHELL了。
if exists (select * from dbo.sysobjects where id=object_id(N'[dbo].[xp_cmdshell]')and
OBJECTPROPERTY(id,N'IsExtendedProc')=1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
GO

在任何的 isql/ osql 視窗中( 或查詢分析器): 
use master
exec sp_dropextendedproc‘xp_cmdshell‘
對 SQLExecutiveCmdExec 的詳細情況請查看下列文章:
http://support.microsoft.com/support/kb/article/Q159/2/21. 
如果你不需要 xp_cmdshell 那請停用它。請記住一個系統系統管理員如果需要的話總是能把它增加回
來。這也好也不好 - 一個侵入者可能發現它不在,只需要把他加回來。考慮也除去在下面的 dll但是移除
之前必須測試因為有些dll同時被一些程式所用。 要找到其他的程式是否使用相同的 dll: 首先得到該 dll 。
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name=‘xp_cmdshell
其次,使用相同的 dll發現其他的擴充儲存操作是否使用該dll。
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text=‘xplog70.dll‘ 
使用者可以用同樣的辦法處理下面步驟中其他你想去掉的進程。
7. 如不需要就停用對象串連與嵌入自動化儲存程式 ( 警告 - 當這些儲存程式被停用的時候 , 一些企業管理器功能可能丟失). 這些包括: 
Sp_OACreate
Sp_OADestroy 
Sp_OAGetErrorInfo 
Sp_OAGetProperty 
Sp_OAMethod 
Sp_OASetProperty 
Sp_OAStop 
如果你決定停用該進程那麼請給他們寫一個指令碼這樣在以後你用到他們的時候你能夠把他們重新添加回來 。 記住, 我們在這裡正在做的是鎖定一個應用程式的功能 - 你的開發平台應該放到其他機器上。
8. 禁用你不需要的註冊表存取程式。(同上面的警告)這些包括: 
Xp_regaddmultistring 
Xp_regdeletekey 
Xp_regdeletevalue 
Xp_regenumvalues 
Xp_regremovemultistring 
注意 :我過去一直在這裡列出 xp_regread/ xp_regwrite但是這些程式的移除影響一些主要功能包括日誌和SP的安裝,所以他們的移除不被推薦
9.移除其他你認為會造成威脅的系統儲存進程。 這種進程是相當多的,而且他們也會浪費一些cpu時間。 小心不要首先在一個配置好的伺服器上這樣做。首先在開發的機器上測試,確認這樣不會影響到任何的系統功能。在下面是我們所推薦的有待你評估的一些列表:
sp_sdidebug 
xp_availablemedia 
xp_cmdshell 
xp_deletemail
xp_dirtree 
xp_dropwebtask 
xp_dsninfo 
xp_enumdsn 
xp_enumerrorlogs 
xp_enumgroups 
xp_enumqueuedtasks 
xp_eventlog 
xp_findnextmsg 
xp_fixeddrives 
xp_getfiledetails 
xp_getnetname 
xp_grantlogin 
xp_logevent 
xp_loginconfig 
xp_logininfo 
xp_makewebtask 
xp_msver xp_perfend 
xp_perfmonitor 
xp_perfsample 
xp_perfstart 
xp_readerrorlog 
xp_readmail 
xp_revokelogin 
xp_runwebtask
xp_schedulersignal 
xp_sendmail 
xp_servicecontrol 
xp_snmp_getstate 
xp_snmp_raisetrap 
xp_sprintf 
xp_sqlinventory 
xp_sqlregister 
xp_sqltrace 
xp_sscanf 
xp_startmail 
xp_stopmail 
xp_subdirs 
xp_unc_to_drive 
xp_dirtree 
10. 在企業管理器中"安全選項" 之下禁用預設登入。(只有SQL 6.5) 當使用整合的安全時候,這使未經認可的不在 syslogins 表中使用者無權登陸一個有效資料庫伺服器。 

11. 除去資料庫的guest賬戶把未經認可的使用者據之在外。 例外情況是master和 tempdb 資料庫,因為對他們guest帳戶是必需的。

12. 若非必須,請完全地禁用SQL郵件功能。它的存在使潛在的攻擊者遞送潛在的 trojans ,病毒或是簡單實現一個DOS攻擊成為可能

13. 檢查master..Sp_helpstartup看有無可疑的木馬進程。 確定沒有人已經在這裡放置秘密的後門程式。 使用 Sp_unmakestartup 移除任何可疑進程。 

14. 檢查master..Sp_password看有無trojan代碼。比較你的產品scripts和一個新安裝的系統的預設scripts而且方便的儲存。
 
15. 記錄所有的使用者存取訪問情況。 從企業管理器做這些設定或通過以sa登陸進入查詢分析器的下列各項:
xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3

16. 重寫應用程式使用更多使用者定義的儲存和察看進程所以一般的對錶的訪問可以被禁用。 在這裡你也應該看到由於不必經常進行查詢計劃操作而帶來的效能提升。

17. 除去不需要的網路通訊協定。 

18. 注意SQL 伺服器的物理安全。把它鎖在固定的房間裡,並且注意鑰匙的安全。只要有機會到伺服器面前,就總是會找到一個方法進入。

19. 建立一個計劃的任務運行:  findstr/C:" Login Failed"\mssql7\log\*.*‘
然後再重新導向輸出到一個文字檔或電子郵件,因此你監測失敗的登入嘗試。這也為系統管理員提供一個好的記錄攻擊的方法。 也有很多用來分析NT日誌事件的第三者工具。 注意: 你可能需要將路徑換成你安裝SQL的路徑。
20. 設定非法訪問和登陸失敗日誌警報。到 企業管理器中的"Manager SQL Server Messages "搜尋任何有關無權訪問的訊息 ( 從尋找"login failed"和"denied"開始). 確定你所有感興趣的資訊被記錄到事件記錄。然後在這些資訊上設定警報 , 發送一個電子郵件或資訊到一個能夠對問題及時響應的操作員。 

21. 確定在伺服器和資料庫層次上的角色都只被授給了需要的使用者。 當 SQL Server 安全模型 7 有許多增強時候, 它也增加額外的許可層,我們必須監控該層,確定沒有人被授予了超過必需的許可權。 

22. 經常檢查組或角色全體會員並且確定用組分配許可權,這樣你的審計工作能夠簡化。 確定當你在的時候 , 公眾的組不能從系統資料表執行選擇操作。
23. 花些時間審計用空密碼登陸的請求。 使用下面的代碼進行空密碼檢查: 
使用主體 
選擇名字, 
password 
from syslogins
where password is null 
order by name
24. 如果可能,在你的組織中利用整合的安全性原則。 通過使用整合的安全性原則,你能夠依賴系統的安全,最大簡化管理工作從維護二個分開的安全模型中分離開來。這也不讓密碼接近串連字串。 

25. 檢查所有非sa使用者的存取進程和擴充儲存進程的許可權。 使用下面的查詢週期性查詢哪一個進程有公眾儲存許可權。(在SQL Server中 使用 "type" 而不是 "xtype"):
Use master 
select sysobjects.name 
from sysobjects,sysprotects 
where sysprotects.uid=0 
AND xtype 在 (‘X‘,‘P‘) 
AND sysobjects.id=sysprotects.id 
Order by name 

26. 當時用企業管理器的時候,使用整合的安全性原則。 過去,企業管理器被發現在標準的安全模態中儲存 "sa" 密碼在註冊表的 plaintext 中。 注意: 即使你改變模態,密碼也會留在註冊表中。 使用 regedit 而且檢查鍵:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\MSSQLServer\SQLEW\ Regedi\SQL 6.5 
現在資料被隱藏在 HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group  ("SQL server組" 是預設值但是你可能已建立使用者組因此相應地改變其位置) 

27. 發展一個審核計劃而且訂定每月的安全報告,對IT主管可用的報表包括任何的新exploit,成功的攻擊 , 備份保護 , 和對象存取失敗統計。

28. 不要允許使用者互動式登陸到 SQL Server之上。這個規則適用任何的伺服器。 一旦一個使用者能夠互動式進入一個伺服器之內,就有能用來獲得管理員的存取特權得到管理員權限。 

30. 儘力限制對SQL Server的查詢與存取操作。 使用者可以用最小許可權查詢sql server中的很多東西。若非必須不要給他們機會。
 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.