注意:我了解所涉及的風險,以及通過這樣做破壞生產(chǎn)系統(tǒng)的可能性.無論如何,我有興趣這樣做.
每當我嘗試使用系統(tǒng)目錄時,我都會遇到這些奇怪的錯誤,
UPDATE sys.sql_loginsSET password_hash = PWDENCRYPT('pass')WHERE name = 'sa';
產(chǎn)生錯誤,
Msg 259 […] Ad hoc updates to system catalogs are not allowed.
我嘗試了很多方法來取下訓練輪,
sp_configure 'allow updates',`goreconfigurego
但是,我無法弄清楚正確的選擇……
它甚至在this answer中說:
this is no longer possible (at least not without jumping through a ton of additional hoops beyond just an
sp_configure
option – it’s not something you ever want to do on a production system), and all of the system catalog is now exposed through read-only views like sys.objects.
好吧,如果我想跳過那些箍怎么辦?我該怎么做?
解決方法:
!務必閱讀警告,大膽,在底部!
允許更新的服務器配置選項在SQL Server 2005中開始呈現(xiàn)為無效.文檔指出它不會出錯,但實際上不允許對系統(tǒng)目錄表進行任何直接更新.
現(xiàn)在實現(xiàn)這一目標的唯一方法是,完全知道這是危險的,并且不推薦使用Dedicated Admin Console (DAC) connection.
首先,您需要要更新的實際表名.您從中選擇的名稱只是一個系統(tǒng)目錄View,而不是真正的Table.我通常使用以下內(nèi)容:
EXEC sp_helptext N'sys.{some name here}';
然后,執(zhí)行以下操作:
>使用以單用戶模式重新啟動實例
sudo systemctl stop mssql-serversudo -u mssql /opt/mssql/bin/sqlservr -m
需要明確的是:此步驟允許系統(tǒng)目錄更新.連接到DAC本身以執(zhí)行其他操作不需要單用戶模式.
>通過專用管理控制臺連接與sa或其他一些sysadmin登錄連接.您可以通過在命令提示符窗口中運行以下命令在SQLCMD交互式會話中執(zhí)行此操作:
sqlcmd -S admin:localhost -U sa
如果Linux SQLCMD由于某種原因不支持此功能,您可以啟用遠程DAC連接,然后使用Windows機器來挖掘DAC正在工作.您可以在Linux上啟用DAC,:
EXEC sp_configure 'remote admin connections', 1; RECONFIGURE;
>在該DB中,嘗試以下內(nèi)容:
UPDATE sys.{whatever_name_you_found} {enter}SET [some_column] = {some_value} {enter}WHERE [some_other_column] = {the_better_be_correct_or_else_ID}; {enter}GO {enter}
在您輸入GO {enter}之前,它不會執(zhí)行該語句.
危險將羅賓遜!
直接編輯系統(tǒng)目錄表時請務必小心,并且不要過于習慣這樣做.只有在絕對沒有其他方法來解決問題時(例如此處的情況),才應該這樣做.避免直接編輯可能有幾個原因,但最初想到的兩個原因是:
>就像我們創(chuàng)建的數(shù)據(jù)模型一樣,可能存在規(guī)則和工作流程,以確定我們不知道的工作方式(例如,非規(guī)范化,管理各種表格中數(shù)據(jù)狀態(tài)的“業(yè)務”規(guī)則等)
>如果遇到問題并簽訂支持合同(我還沒有看到支持協(xié)議的條款,但我很難相信這樣的語言不會出現(xiàn)),微軟很可能會做出直接修改而無法幫助你.在那里).
@Paul Randal在評論中確認:“手動編輯系統(tǒng)表會在數(shù)據(jù)庫的引導頁面中不可撤銷地設置一個標記,標記您的數(shù)據(jù)庫已經(jīng)以這種方式進行了編輯,如果您隨后遇到問題,CSS可能會決定不幫助您數(shù)據(jù)庫.”
來源:https://www.icode9.com/content-2-378351.html