Еще одна вещь это не упоминается, состоит в том, что безопасность в Windows намного более непрозрачна, чем в Linux.
Например, я могу посмотреть на несколько текстовых файлов и видеть точно, что выполняет мой веб-сервер. IIS? Не так - Вы видите результаты конфигурации через инструмент GUI, но существуют скрытые настройки. Затем необходимо использовать другой набор инструментов для рассмотрения ACLs на файлах и т.д.
Это - то же с большинством программ в мире окон - очень трудно быстро понять точно, что влияет на среду выполнения между реестром и ACLs.
Для соединения с mysql сервером, необходимо обеспечить учетные данные. Можно указать их в конфигурационном файле, передать их через командную строку или просто создать учетную запись, которая не требует учетных данных.
Конечно, опция без паролей никогда не должна использоваться, передача - командной строкой не большая, потому что любой, кто может выполнить PS, может видеть командную строку.
Рекомендуемая опция состоит в том, чтобы создать mysql конфигурационный файл с учетными данными в нем и затем защитить тот файл с полномочиями файловой системы поэтому, только Ваш резервный пользователь может получить доступ к нему.
Вы способность войти в mysql сервер, в то время как зарегистрированный в интерактивном режиме как корень, кажется, предлагает, чтобы Вам или не устанавливали пароль root, или что у Вас есть конфигурационный файл, который не находится Вашим сценарием. Если у Вас есть .my.cnf, Вы, возможно, должны вручную указать на него. Если бы Вашей корневой учетной записи не установили пароль затем, я сильно поощрил бы Вас фиксировать это.
Обновление (2016-06-29) при выполнении mysql 5.6.6 или больше необходимо посмотреть на mysql_config_editor инструмент, который позволяет Вам хранить учетные данные в зашифрованном файле. Благодаря Giovanni для упоминания этого мне.
Безопасность не должна быть сделана через мрак. Если Вы боящийся, что у кого-то есть доступ к Вашей корневой учетной записи, не имеет значения, если mysql пароль корня хранится в сценарии, так как у Вас есть все свои доступные данные в дампах mysql или файлы базы данных. Так, реальный вопрос - то, что Вы пытаетесь защитить?
Если Вы не хотите, чтобы другие получили пароль, который позволит им изменить данные в Вашей базе данных, необходимо было бы создать пользователя с соответствующими полномочиями.
Если Вы не хотите это, mysql пароль, который будет замечен любой локальной учетной записью кроме корня, установил полномочия файла на том сценарии, чтобы быть 0700 и владелец для укоренения.
Ваше использование оболочки может сделать это becuase, у Вас есть оболочка для выполнения его от, т.е. когда Вы входите в систему, все Ваши сценарии оболочки в Вашем профиле выполняются.
Крон не имеет такой роскоши. Когда это войдет в систему (как корень), это войдет в систему с оболочкой по умолчанию. Это препятствует тому, чтобы любой вошел в систему удаленно, но это также означает, что нет никаких автосценариев входа в систему, которые запущены.
Можно установить оболочку для крона, чтобы работать под, отредактировать crontab и добавить SHELL и ДОМАШНИЕ переменные, например.
SHELL=/bin/bash
HOME=/root
если они не будут установлены, то крон будет работать с оболочкой и корневым каталогом, указанным в/etc/passwd (которые являются, вероятно, ничем, возможно/bin/sh).
Если Вы хотите видеть, что крон среды работает как, добавьте задание крона, которое экспортирует ENV в файл, например:
$crontab -e
* * * * * env > /tmp/crontabenv.log
:wq
Если скрипт запущен корнем, Вы могли бы создать файл/root/.my.cnf с полномочиями 600 и следующее содержание:
[client]
user = DBUSERNAME
password = DBPASSWORD
(где Вы вводите свое имя пользователя MySQL и пароль, конечно).
Этот файл будет автоматически считан любым mysql инструментом командной строки, если он будет выполнен как корень. Больше никакой потребности обеспечить его на команде-linea. Эти 600 полномочий защищают его от любопытных глаз.
Крон может быть очень печальным для отладки. Когда задания крона выполняются, им не установили среду как Вы, считают само собой разумеющимся с оболочкой.
Подсказки для крона:
Если Ваш пользователь root может сделать это от оболочки, крон должен смочь сделать это. Удостоверьтесь, что Вы явно указываете файл конфигурации для использования на командной строке.
Хотя некоторые из этих ответов являются полезными, некоторые из них путают, так как unix-пользователь root и mysql-пользователь root не являются одинаковыми и, по сути, не имеют никаких отношений, кроме того, что они оба используют имя пользователя 'root'. Возможно, это очевидно, но, похоже, некоторые ответы объединяют их.
Полезным вариантом (возможно, он существует?) для mysqld было бы разрешить клиентским программам, таким как mysql или mysqldump и т.д., запущенным под unix root, получить доступ к mysqld'у root@localhost без пароля, без необходимости хранить пароль root@localhost (mysql) в моем компьютере. Я знаю, что это заставляет нервничать, но, по моему мнению, любой, кто использует unix root в качестве локального (на сервере mysqld), может легко обойти систему безопасности mysqld. А иметь a.cnf с паролем mysqld root 7x24 или даже создавать/удалять a.cnf с паролем mysql root (откуда этот пароль?) "на лету" (например, (например, для выполнения mysqldump) заставляет me нервничать.
Это потребует некоторой инфраструктуры и размышлений, потому что нужно доверять mysql/mysqldump/etc, чтобы передать mysqld, что он действительно верит, что он запущен под локальной учетной записью unix root.
Но, например, ограничение только unix сокетами mysqld, без TCP, может помочь, по крайней мере, как настоятельно рекомендуемая опция этой опции. Это может установить, что клиент работает под локальной учетной записью, чего, вероятно, недостаточно. Но это может быть началом идеи. Возможно, отправка дескриптора файла через unix-сокет может быть другой частью (google it, если это звучит как сумасшедший разговор)
P.S. Нет, я не буду пытаться провести мозговой штурм прямо здесь, как что-либо из этого может работать на не-униксовой операционной системе, то эта идея, вероятно, транслируется в другие операционные системы
.