首页 > 解决方案 > Sqlcmd - 在没有明文密码的情况下运行 sql 查询脚本?

问题描述

希望到目前为止你过得愉快:)

我正在使用这个脚本来自动化一个 sqlquery,以便另一个团队可以使用这些日志。但是,不允许他们拥有此数据库的登录凭据,并且我当前的脚本使用明文密码。

我建议我们创建一个新的数据库配置文件并限制配置文件的权限,这样只有特定的表才能以只读权限访问。但是,这不是最佳实践,我的领导不喜欢这个想法。

所以,我试图找出一种通过脚本传递登录凭据的方法,而不使用明文。

你有什么想法?

这是我在批处理文件中运行的 cmd 的当前格式:

sqlcmd -S server.database.windows.net -U user@domain -P password -d DB_Name -i "c:\users\%USERNAME%\desktop\Blue Prism Audit Logs\eventdatetime24hr.sql" -o "c:\users\%USERNAME%\desktop\Blue Prism Audit Logs\Audit Logs\queryOut%DATE:~4,2%_%DATE:~7,2%_%DATE:~-4%_%time:~0,2%%time:~3,2%.csv"

标签: sqlcmdcleartext

解决方案


  1. 展开 SQL Server Agent 节点并右键单击 SQL Server Agent 中的 Jobs 节点并选择“New Job”

  2. 在“新工作”窗口中,在“常规”选项卡上输入工作名称和描述。

  3. 选择窗口左侧的“步骤”,然后单击底部的“新建”。

  4. 在“步骤”窗口中,输入步骤名称并选择要运行查询的数据库。

  5. 将要运行的 T-SQL 命令粘贴到命令窗口中,然后单击“确定”。

  6. 单击“新作业”窗口左侧的“计划”菜单并输入计划信息(例如每天和时间)。

单击“确定”-应该就是这样。

(您当然可以添加其他选项 - 但我想说这是您设置和安排工作所需的最低限度)

带输出的示例 tsql 代码

DECLARE @cmd sysname, @var sysname;  
SET @var = 'Hello world';  
SET @cmd = 'echo ' + @var + ' > var_out.txt';  
EXEC master..xp_cmdshell @cmd;

更多信息在这里:https ://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/xp-cmdshell-transact-sql?view=sql-server-ver15

这将创建一个脚本,该脚本可以在您需要时运行,并将其设置在数据库上,然后您可以决定将输出放在哪里,即在目标位置供其他团队获取。


推荐阅读