在MySQL Server端,执行mysql 命令进入mysql 命令模式。使用grant命令用来建立新用户,指定用户口令并增加用户权限。命令格式如下:
grant [previleges] on [dbName].[tableName] to [userName]@[hostName] identified by "password";
flush privileges;
解释上面需要替换的变量意义:
previlege:授予的权限;
dbName:指定被访问的数据库名称,如果指定所有数据库可使用*星号;
tableName:指定被访问的数据表,如果指定某个数据库下的所有数据表可使用*星号;
userName:远程主机的登录用户名称;
hostName:远程主机名或者IP地址;
password:远程主机用户访问MySQL使用的密码。
示例一:
grant select on DEL_RESULT.* to dablelv@10.134.130.86 identified by "123@123";
flush privileges;
上面是一个具体授权示例。授予远程主机10.22.22.22,用户名为dablelv使用密码123@abc来访问MySQL的数据库DEL_RESULT下所有数据表,但只有select权限。
远程主机可使用如下命令来访问:
#run sql statement
function runsql(){
dbHost="-h10.241.100.107"
dbUserName="-udablelv"
dbPwd="-p123@abc"
dbName="DEL_RESULT"
dbContext="${dbHost} ${dbUserName} ${dbPwd} ${dbName}"
echo $* | mysql ${dbContext};
}
runsql "select * from testtable"
注意,上面访问MySQL的脚本中的用户名称和密码,就是在MySQL服务端授权指定的用户名称和密码。需要通过-h指定MySQL服务端的主机地址。
示例二:
授予来自任意远程主机的用户dablelv对MySQL服务端的所有数据库和数据表拥有所有权限。
grant all privileges on *.* to dablelv@"%" identified by "123@abc";
flush privileges;
[privileges]是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。你可以指定的权限可以分为三种类型:数据库、数据表和数据列的权限。
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。
全局管理MySQL用户权限:
file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录–其它什么也不允许做。
查看指定用户的权限可使用如下格式命令:
show grants for [用户名]
比如查看MySQL的本地用户root拥有的权限:
show grants for root@localhost;
查看MySQL所有用户的权限,可以从mysql的用户表mysql.user中查询。查询语句如下:
select * from mysql.user \G
当然,也可以指定用户查看其权限,功能与show grants for [用户名]
相同。
select * from mysql.user where user="userName";
[1]MySQL用户权限类型
[2]查看MYSQL数据库中所有用户及拥有权限