$mysqlpath = "C:Program FilesMySQLMySQL Server 5.6bin"
$backuppath = "C:UsersTiffanyDownloads"
$username = "user"
$password = "123123"
$database = "db"
$errorLog = "error_dump.log"
$date = Get-Date
$timestamp = "" + $date.day + $date.month + $date.year + "_" + $date.hour + $date.minute
$backupfile = $backuppath + $database + "_" + $timestamp +".sql"
CD $mysqlpath
.mysqldump.exe --user=$username --password=$password --log-error=$errorLog --result-file=$backupfile --databases $database
CD $backuppath
$oldbackups = gci *.sql*
for($i=0; $i -lt $oldbackups.count; $i++){
if ($oldbackups[$i].CreationTime -lt $date.AddMonths(-1)){
$oldbackups[$i] | Remove-Item -Confirm:$false
}
}
但是,我不断收到以下内容:
mysqldump.exe : Warning: Using a password on the command line interface can be insecure.
At C:UsersTiffanyDesktopmysqldump.ps1:14 char:16
+ .mysqldump.exe <<<< --user=$username --password=$password --log-error=$errorLog --result-file=$backupfile --databases $database
+ CategoryInfo : NotSpecified: (Warning: Using ...an be insecure.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我是否需要设置一个标志来允许此命令行?
我会回避这个问题并使用my.cnf
来存储凭据,而不是将此类数据存储在powershell脚本中,请参阅如何在没有密码提示的情况下执行mysqldump?:
[mysqldump]
user=mysqluser
password=secret
http://dev.mysql.com/doc/refman/5.5/en/option-files.htmlhttp://dev.mysql.com/doc/refman/5.5/en/password-security-user.html
通过命令行选项交出凭据将使它们显示在进程列表中(取决于谁查看进程列表,但仍然如此(。
如果您回避此警告,则需要意识到您没有解决问题。
警告告诉您密码的使用不安全。但这是您在使用自动脚本时必须接受的事实。如果你想自动化一些需要信任的东西,你将不得不将信条存储在某个地方。这是不可避免的,但您可以采取一些步骤来保持合理的安全性。您可以避免警告,但无法避免安全问题。
Akira的建议也好不到哪里去。将密码移动到磁盘上的配置文件中只会导致密码保留在其他地方。 在那个地方,它很容易被盗或妥协。
如果您遵循有关密码安全性的合理智慧,那么您真正应该做的是创建一个仅有权执行MySQL转储的MySQL用户。然后将该用户/密码组合与脚本一起使用。这样,如果有人设法窃取密码,他们能做的最糟糕的事情就是转储数据库。 它们将被阻止向数据库注入细微(或不那么微妙(的更改,这很好,因为数据库更改可用于造成更大的损害。
要遵循的一些一般规则:
- 尽量避免以纯文本形式将密码存储在任何地方。尽可能加密它们或存储在加密的保管库中。
- 始终假设密码可能被泄露或被盗。
- 始终遵循最小特权主体。无论您使用什么用户,都应该具有完成任务所需的绝对最低权限,仅此而已。
警告
现在说了上述所有内容,您还应该注意以下几点。如果您在托管MySQL服务器的同一主机上执行自动化过程,那么您需要考虑保护密码的努力是否富有成效。您需要考虑如果黑客获得了您存储的密码,他们还可以访问什么。例如,如果此MySQL服务器用于备份网站(例如WordPress(,并且MySQL服务器与网站文件位于同一台计算机上,并且网站的密码存储在文件中,那么对机器的任何妥协都意味着100%的妥协。黑客可以获取网站文件并获得对数据库的完全访问权限。因此,在所描述的场景中,尝试保护您的特殊导出密码是完全没有意义的。
意识到任何密码持久性都会带来风险。这就是警告存在的原因。试图避开警告可能会给你一种安全的"错觉"。接受警告并了解其含义。