一、关于MySQL权限的几点常识: 1、MySQL的权限系统主要用来验证用户的操作权限。 2、在MySQL内部,权限信息存放在MySQL数据库的granttable里。当mysql启动后,granttable里的信息会写入内存。 3、MySQL 使用user name 加 host name 来作为标识符。 通过这种标识符,可以用来区分不同host上的相同的user name。 4、MySQL 权限控制有2种策略: 1)根据密码是否正确来控制客户端的连接。 2)假设可以正常connect,server还可以检查每个satement是否有权限去执行。如果只有某张表的select 权限,就不能进行drop 操作。 5、如果用户的权限改变,当前已连接的会话用户不会受影响,下次登录才会生效。
二、关于MySQL的几个有关权限表的含义: user:用户账号、全局权限 db:库级别权限 host:废弃 tables_priv:表级别权限 colums_priv:列级别权限 procs_priv:存储过程和存储函数相关的权限 proxies_priv:代理用户权限
三、MySQL用户账号的创建规则 用户名@主机 用户名:16字符以内 主机: IP:192.168.2.1 网络地址:192.168.0.0/255.255.0.0 通配符:%,192.168.%.%,%.test.com
四、MySQL的用户权限级别 服务管理类:super 库:CREATE 表:DELETE、ALTER 列:INSERT、SELECT、UPDATE
更多级别可参考MySQL官方文档
五、与权限相关的几个命令 GRANT 权限,... ON [对象类型] db.{table|routine} TO 'username'@'host' [INDENTIFIED BY 'password']; REVOKE 权限,... ON [对象类型] db.{table|routine} FROM 'username'@'host'; SHOW GRANTS FOR 'username'@'host'; CREATE USER 'username'@'host' [IDENTIFIED BY 'password']; DROP USER 'username'@'host'; RENAME USER old_name TO new_name;
六、权限的操作命令举例 查看当前数据库的所有用户: select user,host,password from mysql.user;
给用户赋予super权限(super和ALL PRIVILEGES都可以): GRANT super ON *.* TO 'mysql'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost';
删除用户的super权限(super和ALL PRIVILEGES都可以): REVOKE super ON *.* FROM 'mysql'@'localhost'; REVOKE ALL PRIVILEGES ON *.* FROM 'mysql'@'localhost';
查看赋予用户的权限 SHOW GRANTS FOR 'mysql'@'localhost';
七、MySQL的问题处理
1、MySQL登录密码忘记时的恢复操作
启动mysql_safe时传递两个参数: --skip-grant-tables 跳过授权表 --skip-networking 为了安全,防止网络登录 登录方式一: 修改/etc/init.d/mysql 登录方式二: 直接在my.cnf配置 [mysqld] skip-grant-tables skip-networking 而后修改密码: 通过更新授权表方式直接修改其密码,而后移除此两个选项重启服务器 UPDATE user SET PASSWORD=PASSWORD('123456') WHERE User='root'
2、客户端连接MySQL数据库速度慢的问题
直接在my.cnf配置,关闭DNS的反向解析参数 [mysqld] skip-name-resolve
|