mysql权限说明
关于权限问题
1.MySQL是根据用户名和主机名来唯一确定一个用户的.例如:db_name@localhost
2.主机地址使用 % 号为通配符.在这里,任何相同的用户名,不同IP的账号,都可以成功匹配(db_name@%)
3.如果Mysql用户表里面有明确写明IP地址.则去匹配明确的IP ,例如(da_name@127.0.0.1)
4.mysql登陆默认的ip地址是 localhost
5.mysql权限分5个等级
* 全局层级 存放位置在:mysql.user 对应的memory表为:information_schema.USER_PRIVILEGES
* 数据库层级 存放位置在:mysql.db 对应的memory表为:information_schema.SCHEMA_PRIVILEGES
* 表层级 存放位置在:mysql.tables_priv 对应的memory表为:information_schema.TABLE_PRIVILEGES
* 列层级 存放位置在:mysql.columns_priv 对应的memory表为:information_schema.COLUMNS
* 子程序层级 存放位置在:mysql.procs_priv 对应的memory表为:information_schema.ROUTINES
6.mysql client 连接 server 扫描权限的方式.
Ⅰ. mysql.user表中的host、user、password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证.
Ⅱ. 按照mysql.user、mysql.db、mysql.tables_priv、 mysql.columns_priv的顺序来分配权限.
Ⅲ. 如果user中对应的权限为Y.则此用户对所有数据库的权限都为Y.将不再检查mysql.db、mysql.tables_priv、mysql.columns_priv表
Ⅳ. 如果user中对应的权限为N.则到db表中检查此用户对应的具体数据库.如果db表为Y.则不用扫描该权限的mysql.tables_priv、mysql.columns_priv.
Ⅴ. 以此类推.
7.MYSQL 视图权限说明.
Ⅰ. 对视图的操作必须要先对视图对应的表有操作的权限.
Ⅱ. 对视图的操作有2个默认的参数. 第一个 *为DEFINER 表示创建者. 默认为当前用户. 例如 DEFUNER=root@localhost
第二个 *为SQL SECURITY { DEFINER | INVOKER } 表示以什么身份访问这个视图.
*DEFINER 表示为以创建者的权限去访问这个视图.
*INVOKER 表示为以调用者的权限去访问这个视图.
Ⅲ.创建视图必须要有create view权限和对应实体表的select的权限.
8.MYSQL 存储过程权限说明.
Ⅰ. 对存储过程有三个权限.create routine、 alter routine、 execute分别是创建权限、修改权限、执行权限.
Ⅱ. 对存储过程的操作有2个默认的参数. 第一个 *为DEFINER 表示创建者. 默认为当前用户. 例如 DEFUNER=root@localhost
第二个 *为SQL SECURITY { DEFINER | INVOKER } 表示以什么身份访问这个存储过程.
*DEFINER 表示为以创建者的权限去访问这个存储过程.
*INVOKER 表示为以调用者的权限去访问这个存储过程.
9.mysql 触发器的权限说明.
Ⅰ. 创建触发器必须有super权限才能创建和使用.
Ⅱ. 对触犯器的操作有1个默认的参数 DEFINER 表示创建者. 默认为当前用户. 例如 DEFUNER=root@localhost
Ⅲ. 只有创建者对这个触发器有操作的权限,调用者才能使用这个触发器,也就相当隐藏了SQL SECURITY DEFINER 参数