一篇很有意義的MSSQL修改啟動賬戶和口令的帖子
帖子太大了,挑些主要的寫一下吧:
SQL code 建立角色,使用者,許可權 /* --示例說明 示例在資料庫pubs中建立一個擁有表jobs的所有許可權、擁有表titles的SELECT許可權的角色r_test 隨後建立了一個登入l_test,然後在資料庫pubs中為登入l_test建立了使用者賬戶u_test 同時將使用者賬戶u_test新增到角色r_test中,使其透過許可權繼承獲取了與角色r_test一樣的許可權 最後使用DENY語句拒絕了使用者賬戶u_test對錶titles的SELECT許可權。 經過這樣的處理,使用l_test登入SQL Server例項後,它只具有表jobs的所有許可權。 --*/ USE pubs --建立角色 r_test EXEC sp_addrole 'r_test' --授予 r_test 對 jobs 表的所有許可權 GRANT ALL ON jobs TO r_test --授予角色 r_test 對 titles 表的 SELECT 許可權 GRANT SELECT ON titles TO r_test --新增登入 l_test,設定密碼為pwd,預設資料庫為pubs EXEC sp_addlogin 'l_test','pwd','pubs'- -為登入 l_test 在資料庫 pubs 中新增安全賬戶 u_test EXEC sp_grantdbaccess 'l_test','u_test' --新增 u_test 為角色 r_test 的成員 EXEC sp_addrolemember 'r_test','u_test' --拒絕安全賬戶 u_test 對 titles 表的 SELECT 許可權 DENY SELECT ON titles TO u_test /* --完成上述步驟後,用 l_test 登入,可以對jobs表進行所有操作,但無法對titles表查詢,雖然角色 r_test 有titles表的select許可權,但已經在安全賬戶中明確拒絕了對titles的select許可權,所以l_test無titles表的select許可權--*/ - -從資料庫 pubs 中刪除安全賬戶 EXEC sp_revokedbaccess 'u_test' --刪除登入 l_test EXEC sp_droplogin 'l_test'--刪除角色 r_test EXEC sp_droprole 'r_test' SQL code --1. 建立示例環境。首先使用下面的程式碼建立一個登入l_test,並且為登入在資料庫pubs中建立關聯的使用者賬戶u_test,並且授予使用者賬戶u_test對錶titles的SELECT許可權,用以實現登入l_test連線到SQL Server例項後,可以訪問表titles。然後建立了一個應用程式角色r_p_test,授予該角色對錶jobs的SELECT許可權,用以實現啟用r_p_test時,允許訪問特定的表jobs。 USE pubs --建立一個登入 l_test, 密碼 pwd, 預設資料庫 pubs EXEC sp_addlogin 'l_test','pwd','pubs' --為登入 l_test 在資料庫 pubs 中新增安全賬戶 u_test EXEC sp_grantdbaccess 'l_test','u_test' --授予安全賬戶 u_test 對 titles 表的 SELECT 許可權 GRANT SELECT ON titles TO u_test --建立一個應用程式角色 r_p_test, 密碼 abc EXEC sp_addapprole 'r_p_test','abc' --授予角色 r_p_test 對 jobs 表的 SELECT 許可權 GRANT SELECT ON jobs TO r_p_testGO --2. 啟用應用程式角色。 /*--啟用說明 示例環境建立完成後,在任何地方(比如查詢分析器、應用程式) 使用登入l_test連線SQL Server例項,均只能訪問表titles,或者是guest使用者 和public角色允許訪問的物件。 如果要在某些特定的應用程式中,允許登入訪問表jobs,那麼, 可以啟用應用程式角色r_p_test,啟用應用程式角色後,登入本身的許可權會消失。 下面在查詢分析器中登入,演示啟用應用程式角色r_p_test前後對資料訪問的區別。--*/ --啟用應用程式角色 r_p_test 前,登入具有表 titles 的訪問權,但無表 jobs 的訪問權 SELECT titles_count=COUNT(*) FROM titles SELECT jobs_count=COUNT(*) FROM jobs /*--結果: titles_count ------------ 18 ( 所影響的行數為 1 行) 伺服器: 訊息 229,級別 14,狀態 5,行 2拒絕了對物件 'jobs'(資料庫 'pubs',所有者 'dbo')的 SELECT 許可權。 --*/ GO --用密碼 abc 啟用 r_p_test 應用程式角色,並且在將此密碼傳送到SQL Server之前對其加密 EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC' GO --啟用應用程式角色 r_p_test 後,登入失去表 titles 的訪問權,獲取表 jobs 的訪問權 SELECT titles_count=COUNT(*) FROM titles SELECT jobs_count=COUNT(*) FROM jobs /*--結果伺服器: 訊息 229,級別 14,狀態 5,行 2拒絕了對物件 'titles'(資料庫 'pubs',所有者 'dbo')的 SELECT 許可權。jobs_count ----------- 14(所影響的行數為 1 行)--*/ SQL code exec sp_dropsrvrolemember N'aa', sysadmingo exec sp_addsrvrolemember N'aa', securityadmingo --作好SQL的安全管理--作者:鄒建首先,做好使用者安全: --簡單的,只允許sql的使用者訪問sql(防止利用administrator組使用者訪問) 1.企業管理器--右鍵SQL例項--屬性--安全性--身份驗證--選擇"sql server和windows"--確定 2.企業管理器--安全性--登陸--右鍵sa--設定密碼--其他使用者也設定密碼 3.刪除使用者: BUILTIN\Administrators \Administrator --這個使用者不一定有 這樣可以防止用windows身份登陸SQL 4.設定進入企業管理器需要輸入密碼 在企業管理器中 - -右鍵你的伺服器例項(就是那個有綠色圖示的) --編輯SQL Server註冊屬性 --選擇"使用 SQL Server 身份驗證" --並勾選"總是提示輸入登入名和密碼" --確定 --經過上面的設定,你的SQL Server基本上算是安全了. ------------------------------------------------------------------------ 其次,改預設埠,隱藏伺服器,減少被攻擊的可能性 SQL Server伺服器 --開始 --程式 --Microsoft SQL Server --伺服器網路實用工具 - -啟用的協議中"TCP/IP" --屬性 --預設埠,輸入一個自已定義的埠,比如2433 --勾選隱藏伺服器 ---------------------------------------------------------------------------- --管好sql的使用者,防止訪問他不該訪問的資料庫(總控制,明細還可以控制他對於某個資料庫的具體物件具有的許可權) --切換到你新增的使用者要控制的資料庫 use 你的庫名 go --新增使用者 exec sp_addlogin 'test' --新增登入 exec sp_grantdbaccess N'test' --使其成為當前資料庫的合法使用者 exec sp_addrolemember N'db_owner', N'test' --授予對自己資料庫的所有許可權 --這樣建立的使用者就只能訪問自己的資料庫,及資料庫中包含了guest使用者的公共表 go --刪除測試使用者 exec sp_revokedbaccess N'test' --移除對資料庫的訪問許可權 exec sp_droplogin N'test' --刪除登入 如果在企業管理器中建立的話,就用:企業管理器--安全性--右鍵登入--新建登入常規項--名稱中輸入使用者名稱--身份驗證方式根據你的需要選擇(如果是使用windows身份驗證,則要先在作業系統的使用者中新建使用者)--預設設定中,選擇你新建的使用者要訪問的資料庫名伺服器角色項這個裡面不要選擇任何東西資料庫訪問項勾選你建立的使用者需要訪問的資料庫名資料庫角色中允許,勾選"public","db_ownew"確定,這樣建好的使用者與上面語句建立的使用者一樣 --------------------------------------------------------------------------- 最後一步,為具體的使用者設定具體的訪問許可權,這個可以參考下面的最簡示例: --新增只允許訪問指定表的使用者: exec sp_addlogin '使用者名稱','密碼','預設資料庫名' --新增到資料庫 exec sp_grantdbaccess '使用者名稱' --分配整表許可權 GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [使用者名稱] - -分配許可權到具體的列 GRANT SELECT , UPDATE ON table1(id,AA) TO [使用者名稱] ------------------------------------------------------------------- 至於具體的安全設定和理論知道,參考SQL聯機幫助 SQL code /*--建立一個只允許特定程式使用的資料庫使用者 建立一個使用者,這個使用者只有用我們特定的應用程式登入 才具有訪問資料庫的許可權,用其他工具登入沒有任何許可權 在下面的示例中,演示瞭如何控制登入l_test 使其登入後只允許訪問pubs資料庫的titles表 而對jobs表的訪問許可權,只允許在某些許可的應用程式中訪問。--鄒建 2004.09(引用請保留此資訊)--*/ --建立測試環境USE pubs --建立一個登入 l_test, 密碼 pwd, 預設資料庫 pubs EXEC sp_addlogin 'l_test','pwd','pubs' --為登入 l_test 在資料庫 pubs 中新增安全帳戶 u_test EXEC sp_grantdbaccess 'l_test','u_test' --授予安全帳戶 u_test 對 titles 表的 SELECT 許可權 GRANT SELECT ON titles TO u_test --建立一個應用程式角色 r_p_test, 密碼 abc EXEC sp_addapprole 'r_p_test','abc' --授予角色 r_p_test 對 jobs 表的 SELECT 許可權 GRANT SELECT ON jobs TO r_p_testGO --建立好上面的測試後,現在來測試如何使用應用程式角色--我們把使用者及密碼告訴使用者,即告訴使用者,使用者是: l_test,密碼是: pwd --使用者可以用我們這個使用者在任何地方登入,包含查詢分析器 --但是,使用者只能訪問 titles 表,不能訪問其他物件,如果建立使用者時不授予它任何許可權,則它不訪問除guest使用者和public角色允許訪問外的任何物件 --OK,到這裡,我們是把使用者控制住了 --下面我們再來說在程式中的處理,因為使用者在程式中登入後,需要對jobs表有訪問許可權的--我們只需要在使用者登入後,執行一句 EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC' --這樣,我們登入的使用者就轉變為 r_p_test 角色的許可權,而它自身的許可權丟失 --只要這個使用者不退出應用程式,他的許可權就會保持--如果使用者退出了當前應用程式,則他的許可權自動收回 --同時,這個使用者即使沒有退出應用程式,他也是隻在我們的應用程式中有許可權,在其他地方登入,也不會有許可權 --因為這個密碼我們是不用給使用者的,所以,使用者沒有這個角色的密碼,也就限制了他只能在程式中使用我們的資料 --啟用應用程式角色 r_p_test 前,登入具有表 titles 的訪問權,但無表 jobs 的訪問權 SELECT titles_count=COUNT(*) FROM titles SELECT jobs_count=COUNT(*) FROM jobs /*--結果: titles_count ------------ 18 (所影響的行數為 1 行) 伺服器: 訊息 229,級別 14,狀態 5,行 2拒絕了對物件 'jobs'(資料庫 'pubs',所有者 'dbo')的 SELECT 許可權。--*/ GO --用密碼 abc 啟用 r_p_test 應用程式角色,並且在將此密碼傳送到SQL Server之前對其加密 EXEC sp_setapprole 'r_p_test',{Encrypt N'abc'},'ODBC'GO --啟用應用程式角色 r_p_test 後,登入失去表 titles 的訪問權,獲取表 jobs 的訪問權 SELECT titles_count=COUNT(*) FROM titles SELECT jobs_count=COUNT(*) FROM jobs /* --結果伺服器: 訊息 229,級別 14,狀態 5,行 2拒絕了對物件 'titles'(資料庫 'pubs',所有者 'dbo')的 SELECT 許可權。 jobs_count ----------- 14 (所影響的行數為 1 行)--*/ go --刪除測試 EXEC sp_dropapprole 'r_p_test' EXEC sp_revokedbaccess 'u_test' EXEC sp_droplogin 'l_test' 對於第一個問題是否可以用SCM呢?SCM有做新增資料夾目錄和登錄檔讀取許可權麼?只是純粹修改服務啟動賬號?請大蝦指教。scm -Action {1 | 2 | 3 | 4 | 5 | 6 | 7} -Service service_name [-Server server_name] [-Pwd sa_password] [-StartupOptions startup_option [ ...n] ] [-ExePath exe_file_path] [-SvcStartType {1 | 2}] [-SvcAccount service_account] [-SvcPwd service_password] [-Dependencies service_name_dependency [;...n] ] -Action {1 | 2 | 3 | 4 | 5 | 6 | 7} 指定實用工具執行下列何種操作。 程式碼 對策 1 開始 2 重新啟動 3 正在執行 4 刪除服務 5 安裝服務 6 停止 7 修改 scm 實用工具返回訊息框以指出操作是成功還是失敗。使用操作程式碼 3 時,成功表示該服務正在執行, 失敗則表示該服務沒有執行。 -Service service_name 指定被影響的 SQL Server 2000 服務。 [-Server server_name] 指定其服務將受到影響的伺服器。預設設定是本地計算機。 說明 不要在 server_name 中包含例項名稱。僅使用計算機名稱。若要影響命名例項,請用 - Service 選項指定唯一的 service_name。 [-Pwd sa_password] 是伺服器的 sa 登入密碼。預設是空白密碼。 [-StartupOptions startup_option [ ...n] ] 指定當服務啟動時使用的用空格分隔的伺服器啟動選項列表。在安裝或修改該服務時可應用該選項。 [-ExePath exe_file_path] 指定可在本地計算機上執行的服務的檔案路徑。在安裝或修改該服務時可應用該選項。 [-SvcStartType {1 | 2}] 指定服務是否自動啟動。如果指定 1,則必須手動啟動該服務。如果指定 2,則當計算機啟動時自動啟動該 服務。在安裝或修改該服務時可應用該選項。 [-SvcAccount service_account] 指定分配給服務的網路登入帳戶。在安裝或修改該服務時可應用該選項。 [-SvcPwd service_password] 指定網路登入帳戶密碼。在安裝或修改該服務時可應用該選項。 [-Dependencies service_name_dependency [;...n] ] 指定該服務與其它服務的相關性。只有當父服務執行時,相關服務才能執行。在安裝或修改該服務時可應用該選 項。 scm -Action 7 -Service SQLSERVERAGENT -ExePath c:\MICROS~2\MSSQL\binn\sqlagent.exe - SvcStartType 1 -SvcAccount ECH\HUGHIE-SvcPwd 1111 1. 透過本地使用者管理,建立一個本地使用者sqlserver,密碼:123456; 2. 如果現在就我們開啟SERVICES配置透過該使用者啟動,系統會報錯誤: Source:Service Control Manager Event ID:7000 Description: The %service% service failed to start due to the following error: The service did not start due to a logon failure. No Data will be available. 這是因為作為一個普通使用者是無法啟動服務的,我們需要給sqlserver使用者分配必要的許可權。 SQL Server服務啟動賬號必須有3個基本許可權: l 資料庫本地目錄的讀寫許可權; l 啟動本地服務的許可權; l 讀取登錄檔的許可權; 3. 賦予sqlserver使用者mssql(WINDOWS平臺上強大的資料庫平臺)目錄的讀寫許可權; 因為我的SQL SERVER是安裝在D盤,所以我在許可權管理中,將D:\PROGRMAM FILE\Microsoft SQL Server\mssql(WINDOWS平臺上強大的資料庫平臺)讀寫許可權賦予sqlserver使用者。 4. 分配sqlserver使用者啟動本地服務的許可權; 這個比較複雜,我只舉例作為成員伺服器的情況。 l 啟動“Local Security Setting” MMC 管理單元。 l 展開Local Policy,然後單擊User Rights Assignment。 l 在右側窗格中,右鍵單擊Log on as Service,將使用者新增到該策略,然後單擊OK。 l 在右側窗格中,右鍵單擊Log on as a batch job,將使用者新增到該策略,然後單擊OK l 在右側窗格中,右鍵單擊Locks pages in memory,將使用者新增到該策略,然後單擊OK l 在右側窗格中,右鍵單擊Act as part of the operating systme,將使用者新增到該策略,然後單擊OK l 在右側窗格中,右鍵單擊Bypass traverse checking,將使用者新增到該策略,然後單擊OK l 在右側窗格中,右鍵單擊Replace a process level token,將使用者新增到該策略,然後單擊OK l 關閉“Local Security Setting” MMC 管理單元。 如圖: 5. 重新啟動系統,用sqlserver使用者登陸系統; 6. 再重新啟動系統,已administrator使用者登陸,開啟SERVICES管理工具,配置用該使用者啟動mssql(WINDOWS平臺上強大的資料庫平臺)SERVER服務; 這樣我們就可以透過限制SQLSERVER使用者的許可權來控制SQLSERVER擴充套件儲存過程的許可權。 /* ============================================= -- Author: UltraDBA -- Date: 2009-05-30 -- Description: How to change SQL Server 2000 startup account(NO Administrators) -- Step 1:Install the WMI. -- Step 2:Programming with the WMI. -- Step 3:Execute VBS. -- ============================================= */ --Step 1:Install the WMI. BatchFile code @echo oncd\msiexec /i "D:\sql server2000\X86\OTHER\WMI\SQLWMI80.MSI" /quiet /passive /qn /norestartpause@echo off --Step 2:Programming with the WMI,Saved to D:\ChangeMSSQLSERVERAccount.vbs. VBScript. code strComputer = "." Set bjWMIService = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftSQLServer") ' Obtain an instance of the the class ' using a key property value. Set bjShare = objWMIService.Get("Win32_Service.Name='MSSQLServer'") ' Obtain an InParameters object specific ' to the method. Set bjInParam = objShare.Methods_("Change").inParameters.SpawnInstance_() ' Add the input parameters. objInParam.Properties_.Item("StartName") = ".\SqlUser" objInParam.Properties_.Item("StartPassword") = "123456" ' Execute the method and obtain the return status. ' The OutParameters object in objOutParams ' is created by the provider. Set bjOutParams = objWMIService.ExecMethod("Win32_Service.Name='MSSQLServer'", "Change", objInParam) ' List OutParams If objOutParams.ReturnValue = 0 Then Wscript.Echo "The service account of MSSQLServer was changed."Else Wscript.Echo "ReturnValue: " & objOutParams.ReturnValueEnd If --Step 3:Execute VBS D:\ChangeMSSQLSERVERAccount.vbs. SQL code @echo oncd\D:\ChangeMSSQLSERVERAccount.vbs@echo off |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-605582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢oracle中具有預設口令的賬戶2017-03-21Oracle
- 一個有關mssql鎖的帖子2009-06-09SQL
- 第一篇JAVA的帖子2007-11-29Java
- 修改oracle賬戶profile設定2010-10-13Oracle
- 修改asm口令2014-06-25ASM
- Ubuntu 啟用 root 賬戶2024-11-16Ubuntu
- win10怎麼啟用管理員賬戶_win10開啟管理員賬戶的方法2020-04-08Win10
- 修改原始碼,自定義chromium啟動頁2016-05-28原始碼
- win10怎麼啟用來賓賬戶_win10啟用guest來賓賬戶的教程2020-07-16Win10
- 怎麼來開啟Mac中的Root賬戶?2020-12-02Mac
- 創業前思考“做有意義的事”的意義2014-11-11創業
- Git-如何區分使用個人賬戶和公司賬戶2024-09-26Git
- MSSQL匯出所有login賬號和密碼2017-10-26SQL密碼
- 為什麼不能修改自己釋出的帖子???2003-01-04
- Win10中啟用和關閉管理員賬戶2018-12-24Win10
- Ubuntu 修改使用者密碼與啟動root賬號2015-08-13Ubuntu密碼
- 程式碼整潔之道 – 有意義的命名2019-02-16
- linux中修改root口令2007-08-20Linux
- Oracle ebs 11i clone 過來的新系統,需要修改的幾個賬戶2008-03-17Oracle
- VMware管理平臺預設的賬戶和密碼2015-02-03密碼
- 讓win10賬戶限制使用特定軟體的方法_Win10賬戶如何限制開啟特定應用2020-04-13Win10
- WEB 版的報表工具有沒有意義?2020-07-20Web
- 一個很有意義的計算。。。(轉載)2006-03-26
- oracle 只讀賬戶的建立2013-08-08Oracle
- 刪除造謠的帖子不如查匿名帖子ip詳細地址?掌握主動2015-01-11
- AD-禁用賬戶命令 Disable-ADAccount & 批量啟用賬戶命令 Enable-adaccount2020-12-04
- .Net Core 修改預設的啟動埠2018-03-12
- 如何修改 Linux 的 GRUB 啟動背景2017-03-14Linux
- mysql的啟動,以及修改偵聽埠。2007-09-18MySql
- 8個最沒有意義的程式碼註釋2016-02-17
- win10系統無法修改管理員賬戶密碼的解決方法2019-06-26Win10密碼
- 既然Java反射可以訪問和修改私有成員變數,那封裝成private還有意義麼?2018-11-05Java反射變數封裝
- windows10怎麼設定新的本地賬戶_win10建立新的賬戶的方法2019-12-03WindowsWin10
- VSCode的git賬戶重置2020-12-14VSCodeGit
- win10 電子郵件和賬戶選項裡的賬號如何刪除2020-09-20Win10
- MSSQL 2012 修改所有表的架構Schame2014-05-03SQL架構
- 有意思的滾動條顏色配置和cur設定2006-08-02
- 子賬戶及STS臨時賬戶呼叫OSS的常見問題及排查2018-02-01