#重新加载权限表 Flush privileges;
例10 使用UPDATE语句将testUser用户的密码修改为“newpwd2”: UPDATE mysql.user set Password=PASSWORD(\WHERE User=\#重新加载权限表 Flush privileges;
? 使用GRANT命令修改密码
例11 使用GRANT语句将testUser用户的密码修改为“123456”: GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY '123456'; (2)使用set语句修改密码
例12 使用SET语句将root用户的密码修改为“123456789”: SET PASSWORD=password(\
例13 使用SET语句将testUser用户的密码修改为“123456789”: SET PASSWORD FOR 'testUser'@'localhost'=password(\6.1.4 权限管理 1、mysql的权限类型 权限名称 Select insert Update Delete Create Drop Reload Shutdown Process File Grant option 对应user表列 Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv 权限范围 表或列 表 表或列 表 数据库、表、索引 数据库、表、视图 服务器上的文件 服务器管理 存储过程或函数 服务器上的文件 数据库、表、存储过程 References Index Alter Show database Super Createtmp_table Locktables Execute References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv 数据库、表 索引查询的表 数据库 服务器管理 服务器管理 表 表 存储过程或函数 服务器管理 服务器管理 视图 视图 存储过程或函数 存储过程或函数 服务器管理 数据库 Replication slave Repl_slave_priv Replication client Create view Show view Createroutine Alterroutine Create user event 2、授权 (1)权限级别
? 全局层级:grant all on *.*
? 数据库层级:grant all on db_name.*
Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ? 表层级:grant on table_name或database_name.table_name ? 列层级 ? 子程序层级 (2)授权语句
例14 使用GRANT语句创建一个新的用户aaaa,密码为“123456”。用户aaaa对所有的数据有查询、插入权限,并授于GRANT权限。 GRANT语句:
GRANT SELECT,INSERT ON *.* TO 'aaaa'@'localhost' IDENTIFIED BY '123456'
WITH GRANT OPTION;
使用SELECT语句查询用户权限:
SELECT Host,User,Select_priv,Insert_priv, Grant_priv FROM mysql.user where user='aaaa';
例15 使用grant语句将test数据库中student表的delete权限授予用户testUser。 GRANT deleteON test.student TO 'testUser'@'localhost'
例16使用grant语句将test数据库中的sc表的degree列的update权限授予用户testUser。
GRANT update(degree) ON test.sc TO 'testUser'@'localhost' 3、收回权限 (1)收回所有权限
例17收回aaaa用户的所有权限,包括grant权限。 REVOKE all privileges,grantoption FROM 'aaaa'@'localhost'; (2)收回指定权限
例18使用REVOKE语句取消用户testUser的更新权限。 #REVOKE语句:
MySQL> REVOKE UPDATE ON *.* FROM 'testUser'@'localhost'; #使用SELECT语句查询用户test的权限:
MySQL> SELECT Host,User,Select_priv,Update_priv,Grant_priv FROM MySQL.user where user='testUser';
例19 收回testUser用户对sc表的degree列的uodate权限。
MySQL> REVOKE UPDATE(degree ) ON test.sc FROM 'testUser'@'localhost'; 4、查看权限
例20 使用SHOW GRANTS语句查询用户testUser的权限信息。SHOW GRANTS语句及其执行结果如下:
MySQL> SHOW GRANTS FOR 'testUser'@'localhost';
案例操作过程
打开MySQL客户端工具,输入登录命令,登录MySQL。 C:\\>mysql -u root -p Enter password: **
输入正确密码,按回车,出现欢迎信息表示登录成功。 选择mysql数据库为当前数据库。 MySQL> use mysql; Database changed
出现Database changed信息表明切换数据库成功。
创建新账户,用户名称为newAdmin,密码为pw1,允许其从本地主机访问MySQL。 使用GRANT语句创建新账户,创建过程如下: MySQL> GRANT SELECT, UPDATE(id, name, age) -> ON test_db.person_old
-> TO 'newAdmin'@'localhost' IDENTIFIED BY 'pw1' -> WITH MAX_CONNECTIONS_PER_HOUR 30; Query OK, 0 rows affected (0.06 sec) 提示消息可以看到,语句执行成功。
分别从user表中查看新账户的账户信息,从tables_priv和columns_priv表中查看权限信息。
用户账户创建完成之后,账户信息已经保存在user表,权限信息则分别保存在tables_priv和columns_priv中,查询user名称为newAdmin的账户信息,执行过程如下:
SELECT host, user, select_priv, update_priv FROM user WHERE user='newAdmin';
SELECT host, db, user, table_name, table_priv, column_priv FROM tables_priv WHERE user='newAdmin';
SELECT host, db, user, table_name, column_name, column_priv FROM columns_priv WHERE user='newAdmin';
3条SQL语句的查询结果分别如下:
MySQL> SELECT host, user, select_priv, update_priv FROM user WHERE user='newAdmin';
+-----------+--------------+-------------+--------------+ | host | user | select_priv | update_priv | +-----------+--------------+-------------+--------------+ | localhost | newAdmin | N | N | +-----------+--------------+-------------+--------------+ 1 row in set (0.00 sec)
MySQL> SELECT host, db, user, table_name, table_priv, column_priv -> FROM tables_priv WHERE user='newAdmin'; +-----------+-----+-------------+-------------+-------------+---------------+
| host | db | user | table_name | table_priv | column_priv | +-----------+-----+-------------+-------------+-------------+---------------+
| localhost | test | newAdmin | person | Select | Update | +-----------+-----+-------------+-------------+-------------+---------------+ 1 row in set (0.00 sec)
MySQL> SELECT host, db, user, table_name, column_name, column_priv -> FROM columns_priv WHERE user='newAdmin'; +-----------+-----+-------------+-------------+-----------------+----------------+
| host | db | user | table_name | column_name | column_priv | +-----------+-----+-------------+-------------+-----------------+----------------+
| localhost | test | newAdmin | person | id | Update | | localhost | test | newAdmin | person | name | Update | | localhost | test | newAdmin | person | age | Update | +-----------+-----+-------------+-------------+-----------------+----------------+ 3 rows in set (0.00 sec)