sql-server – 如何在SQL Server 2017中直接修改系统目录?
作者:互联网
注意:我了解所涉及的风险,以及通过这样做破坏生产系统的可能性.无论如何,我有兴趣这样做.
每当我尝试使用系统目录时,我都会遇到这些奇怪的错误,
UPDATE sys.sql_logins
SET password_hash = PWDENCRYPT('pass')
WHERE name = 'sa';
产生错误,
Msg 259 […] Ad hoc updates to system catalogs are not allowed.
我尝试了很多方法来取下训练轮,
sp_configure 'allow updates',`
go
reconfigure
go
但是,我无法弄清楚正确的选择……
它甚至在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中开始呈现为无效.文档指出它不会出错,但实际上不允许对系统目录表进行任何直接更新.
现在实现这一目标的唯一方法是,完全知道这是危险的,并且不推荐使用Dedicated Admin Console (DAC) connection.
首先,您需要要更新的实际表名.您从中选择的名称只是一个系统目录View,而不是真正的Table.我通常使用以下内容:
EXEC sp_helptext N'sys.{some name here}';
然后,执行以下操作:
>使用以单用户模式重新启动实例
sudo systemctl stop mssql-server
sudo -u mssql /opt/mssql/bin/sqlservr -m
需要明确的是:此步骤允许系统目录更新.连接到DAC本身以执行其他操作不需要单用户模式.
>通过专用管理控制台连接与sa或其他一些sysadmin登录连接.您可以通过在命令提示符窗口中运行以下命令在SQLCMD交互式会话中执行此操作:
sqlcmd -S admin:localhost -U sa
如果Linux SQLCMD由于某种原因不支持此功能,您可以启用远程DAC连接,然后使用Windows机器来挖掘DAC正在工作.您可以在Linux上启用DAC,:
EXEC sp_configure 'remote admin connections', 1;
RECONFIGURE;
>在该DB中,尝试以下内容:
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}之前,它不会执行该语句.
危险将罗宾逊!
直接编辑系统目录表时请务必小心,并且不要过于习惯这样做.只有在绝对没有其他方法来解决问题时(例如此处的情况),才应该这样做.避免直接编辑可能有几个原因,但最初想到的两个原因是:
>就像我们创建的数据模型一样,可能存在规则和工作流程,以确定我们不知道的工作方式(例如,非规范化,管理各种表格中数据状态的“业务”规则等)
>如果遇到问题并签订支持合同(我还没有看到支持协议的条款,但我很难相信这样的语言不会出现),微软很可能会做出直接修改而无法帮助你.在那里).
@Paul Randal在评论中确认:“手动编辑系统表会在数据库的引导页面中不可撤销地设置一个标记,标记您的数据库已经以这种方式进行了编辑,如果您随后遇到问题,CSS可能会决定不帮助您数据库.”
标签:sql-server-2017,sql-server,linux,system-tables,catalogs 来源: https://codeday.me/bug/20190805/1591663.html