MySQL 初始配置
用户管理
设定root密码和删除匿名账户
某些 MySQL 安装包执行后包含一个空密码的root帐户和一个匿名帐户,这是很大的系统隐患
mysql -u root mysql set password for root@localhost = password('db_passwd'); Or: use mysql; update user set password = password('new_db_passwd') where user='root'; flush privileges; delete from user where user=""; --直接登陆库 mysql mysql mysql -uroot -p -- 显示当前用户 select user(); -- 修改当前用户密码 set password = password('new_db_passwd');
使用 mysqladmin
Notice:
不建议使用,因为密码明文的显示于命令历史中
-- 为空密码的 root 用户设定密码,省略 -p 参数 mysqladmin -uroot -password db_passwd -- 普通用户需要相应权限才可执行此命令 mysqladmin -u db_user -p password new_db_passwd ****** -- 输入旧口令后即更新了密码
创建用户
我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。
MySQL的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。
GRANT 方法
grant all on mydb.* to UserName@HostName identified by "password" ; grant usage on *.* to UserName@HostName identified by "password"; grant select,insert,update on mydb.* to UserName@HostName identified by "password"; grant update,delete on mydb.TestTable to UserName@HostName identified by "password";
若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段,也可以使用REVOKE操作。
GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION; GRANT RELOAD,PROCESS ON *.* TO admin@localhost; GRANT USAGE ON *.* TO dummy@localhost;
这些GRANT语句安装3个新用户:
monty
可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令'something'做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db 创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。
admin
可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行 mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。
dummy
可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。
直接修改授权表设置用户权限
运行这些命令时,注意在结束时FLUSH PRIVILEGES
use mysql; INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid')); INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('stupid')); INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('stupid')); INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y'); INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y'); INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y'); FLUSH PRIVILEGES;
忘记密码的操作
修改你的my.ini 配置文件,
在里面的 [mysqld]节中某处加入下面的一行
skip-grant-tables
然后保存,重启 mysqld 服务,这样你可以使用任何用户名以超级管理员的身体登录 MySQL 服务了。
然后转到mysql数据库中修改user表:
update user set password=PASSword('1234') where user='root';
一定记住要用password函数,否则将来将要输入的密码是'1234'的密文。
最后删除上面所添中的内容,重启服务。
另外,如果可以从本机或其它机器上找到可以正常使用的MySQL数据库,那么也可拷贝其mysql库中的文件名为user的相关文件,覆盖忘记密码的数据库中的同名文件,这样也能以被拷贝者的账户密码登录。
MySQL远程访问
在5.0版本中,其实有一个图形界面的配置向导工具,在设置 root账户密码时,可以选择是否允许其从远程访问。默认情况下是不允许的。
在命令行下,可以有两种方法来作此设置:
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'something' WITH GRANT OPTION; --增加了一个root用户授权通过本地机(localhost)访问,密码"something"。 GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'something' WITH GRANT OPTION; --使用通配符,授与root用户从任何其它主机发起的访问。 mysql -h host -u user -p
亦可直接使用update语句修改user表:使用root用户或其他用户登录mysql,转到mysql数据库
update user set host='localhost' where user='root'; flush privileges; --只允许root在本机登录 update user set host='%' where user='root'; flush privileges; --允许root远程访问
注意,以上一定要加flush语句。
另外,如果要建新用户,则用grant语句比较方便,记住语句grant总是创建新用户。
全局管理权限
- FILE: 在MySQL服务器上读写文件。
- PROCESS: 显示或杀死属于其它用户的服务线程。
- RELOAD: 重载访问控制表,刷新日志等。
- SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限
- Alter: 修改已存在的数据表(例如增加/删除列)和索引。
- Create: 建立新的数据库或数据表。
- Delete: 删除表的记录。
- Drop: 删除数据表或数据库。
- INDEX: 建立或删除索引。
- Insert: 增加表的记录。
- Select: 显示/搜索表的记录。
- Update: 修改表中已存在的记录。
特别的权限:
- ALL: 允许做任何事(和root一样)。
- USAGE: 只允许登录--其它什么也不允许做。