mysql 用户权限管理

用户:
        mysql的用户本身只是mysql的用户与操作系统用户本身无关,一般而言所有用户的用户名都是公开的,密码只有某个授权用户才能管理,mysql的密码采用mysql独有的加密机制进行加密的。
在mysql上面用户由:用户名@主机组成,这就意味着我们的mysql仅仅允许通对应的主机才能访问mysql。mysql的用户仅仅是用来验证身份的。
mysql的用户账号:  由用户名@主机  组成,用户名在16个字符以内,
主机可以使用:主机名:例如 www.mysql.com
ip地址:172.16.10.177
网络地址:可以使用网段,例如172.16.0.0/255.255.0.0
mysql在验证用户主机来源是否合法时候,mysql需要反解用户主机名,
或者解析用户主机名。为了加速mysql服务器性能。而且我们访问时候也不需要使用主机名的话,可以在启动mysql服务时候,使用 --skip-name-resol   就不用去解析主机名了,这会大大提高用户连接速度。
 
权限:用户是否有创建表,删除表,修改表等权限。是需要授权的。
在mysql上面,用户的账号和密码等信息保存在安装完mysql以后。并启动数据库之后的一个叫做mysql的数据库里面的许多表里面的,这些表包括:
user:存放用户的账号,密码,全局权限,与及其他的非全局权限
db:存放了数据库级别的权限定义
host:已经废弃,基本不用
tables_priv: 表级别权限
columns_priv: 列级别权限
procs_priv:存储过程和存储函数相关权限
proxies_priv: 代理用户权限
对我们而言,最重要的就是user,db,tables_priv, column_priv, procs_priv  这几张表
mysql服务器进程在启动的时候。也就是mysqld会读取这几张表,并在内存中生成授权表,因此这几个表是直接被加载进内存的
以后用户的登陆和权限都通过检查这6张表进行。和检查的过程不是访问磁盘上面的表,而是通过内存里面的结构信息完成。任何一个sql语言的查询都会涉及到授权表,因此放在内存当中,可以加速sql语言执行
 
权限的级别:
    全局级别
    库级别
    表级别:delete,alter,select,insert,update,trigger(触发器)
    列级别:select,insert,update
而每一类级别都定义在一张表当中,楚辞之外还有两个权限级别比较独特:存储过程,存储函数
 
 
创建用户:3种方法
create user user_name @ host identified by 'password';
通过这种方式创建的用户只有登录权限。和简单的show databases;
创建完成后,由于mysql的用户以及权限的表都已经读到内存当中,mysql会自动刷新内存授权表。
 
grant 命令创建用户,grant命令本身就是授权的,也可以创建用户,当用户不存在时候会创建。
 
直接 insert into 用户信息到mysql.user 表中。这种方式mysql不会自动刷新内存中的授权表,需要使用flush privilege;  刷新
 
查看某个用户授权信息:
show grants for username@host;
 
 
给用户授权命令:
grant +权限1,权限2,权限3,....... on 对象类别,权限级别 to    username;
 
对象类别:table 表,  function 函数, procedure 存储过程
权限级别:
*  :所有库
*.* :所有库的所有表
db_name.* :某个库下面所有表 
db_name.tb_name:某个库下面的某个表
 tb_name:某个表
 
例如:grant all privileges on db.* to username@'%';
                            权限            对象类别     用户
 
这里表示授权给某个用户,某个数据库下面的表,或者是存储过程,存储函数所有权限。
grant execute on function db.abc to username@'%';
这就表示给我们某个用户授权 数据库下面的存储函数abc 执行权限
 
 
授权某个用户创建一个叫做MyDB的数据库权限。
grant create on MyDB.* to username@'host';
 
这样授权之后,指定用户就只能创建我们指定名称的数据库了
这样的权限能创建指定名称数据库以及在数据库下面创建表,但是却不能对表插入数据 更新等操作。
 
给某个用户插入某个数据库下面表的权限。
 
grant insert into on MyDB.* to username@'host';
 
给某个用户查询某个数据库下面的表权限
 
grant select on MyDB.* to username@'host';
 
 
授权用户alter 命令权限
 
grant alter on MyDB.* to username@'host';
 
授权用户update 权限,但是只能update 某个字段的权限。
 
grant update (字段名) on MyDB.* to username@'host';
 
 
授权某个用户super 权限
 
grant super on *.* to username@'host';
 
 
删除用户:
drop user   username@'host';
 
给用户重命名
 
rename user  username@'host';  to newname@'host';
 
 
取消用户授权revoke 命令
revoke +权限(字段) on 对象 from username@'host'
 
比如:
revoke insert  on MyDB.* from username@'host';
 
这里表示从mydb这个数据库收回 某个用户的insert权限。
posted @ 2018-01-13 16:17  晴天小猫  阅读(286)  评论(0编辑  收藏  举报