1.MySQL用户和权限管理
user表:包含用户的帐号,全局权限
db表:数据库级别的权限定义
tables_priv表:表级别权限
columns_priv表:列级别权限
procs_priv表:存储过程和存储函数相关的权限
proxies_priv表:代理用户权限
2.用户帐号:
用户名@主机构成
用户名:16个字符以内
主机:
主机名:www.baidu.com| mysql
IP:192.168.1.100
网络地址:192.168.1.0/255.255.255.0
通配符:% 和 _
192.168.%.%
%.baidu.com
--skip-name-resolve:为了加速mysql服务器的性能,而且访问mysql的时候也不需要它通过主机名来认证,关闭一切基于主机名认证的方式来进行授权,提高用户连接时候的速度
3.权限级别:
全局级别:SUPER,
库级别:
表级别:
列级别:
存储过程和存储函数级别:
4.创建用户
第一种:CREATE USER username@host IDENTIFIED BY 'password'
第二种:GRANT
第三种:INSERT INTO mysql.user
mysql>FLUSH PRIVILEGES;
4.1查看某个用户的授权信息
SHOW GRANTS FOR 'username@host';
5.为用户添加student库中“创建”的权限
当创建数据库的时候,显示没有权限
6.为用户添加创建sdb和创建sdb库下任何表的权限
7当我们为新创建的tb1表插入数据的时候,显示没有权限
8.为用户添加sdb库下插入数据的权限
当授权完成之后也重读授权表(执行了FLUSH PRIVILEGES;)但是还是不能插入数据
当退出当前mysql再重新登录的时候发现可以插入数据了,所以INSERT权限重新登录
9.为用户同时添加UPDATE、DELETE权限,以及DELETE权限
更新、删除的时候显示没有权限,和INSERT权限一样,需要重新登录
于是重新登录,发现没有SELECT 权限,因为要更新或者删除某一条记录,需要先查到之后才能进行删除,所以需要SELECT权限
10.撤销某个用户的某项权限
11.撤销用户的UPDATE权限,然后为用户添加只能修改sdb库下stb1表的age字段的权限
12.修改MySQL的全局变量,kill掉MySQL进程,需要有SUPER权限
13.删除用户、用户重命名
DROP USER username@host
RENAME USER old_name TO new_name;
14.忘记root密码
14.1关闭MySQL服务
14.2编辑mysql脚本,添加相关参数
编辑/etc/init.d/mysqld,找到下面内容,然后添加
--skip-grant-tables
--skip-networking
14.3启动MySQL服务,并连接到MySQL
14.4修改密码
当视图使用修改授权表的方式去修改密码的时候,MySQL显示说不可以,因为当前启动的MySQL服务已经跳过授权表了
所以只能通过修改user表的方式来修改密码了
14.5修改完密码以后,停止MySQL服务,删除/etc/init.d/mysqld中刚才添加的内容
--skip-grants-table和 --skip-working然后重启MySQL服务
15.权限手册
http://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/privileges-provided.html
16.用户授权的一些其它选项说明
一般情况下不需要使用object_type,当我们要指定特定的,表、存储函数、存储过程
的时候,就需要指定了
当需要为db_name库中的存储函数abc授权的时候,如果执行以下命令,是否可以正常
的给abc存储函数授权呢?
GRANT EXECUTE ON db.abc TO username@'%';
知道abc代表的是什么吗、?---》不知道----》所以我们需要指定授权的类型
所以要想给存储函数abc授权,需要执行
GRANT EXECUTE ON FUNCTION db.abc TO username@'%';