例:用户:username
密码:ABcd_147
数据库:testown
表:test1、test2、test3
1. 先创建用户
create user 'username'@'%' IDENTIFIED by 'ABcd_147';
2. 基础授权,三种方式
权限:
create 创建表
select 查询
insert 插入
update 更新
delete 删除
1)指定数据库、指定表并赋予增删改查权限给目标用户
GRANT select,update,insert,delete ON testown.test1 TO username@'%' IDENTIFIED BY 'ABcd_147';
GRANT select,update,insert,delete ON testown.test2 TO username@'%' IDENTIFIED BY 'ABcd_147';
GRANT select,update,insert,delete ON testown.test3 TO username@'%' IDENTIFIED BY 'ABcd_147';
2) 指定数据库并赋予增删改查权限给目标用户
GRANT select,update,insert,delete ON testown.* TO username@'%' IDENTIFIED BY 'ABcd_147';
3)指定所有权限
GRANT all privileges ON *.* TO username@'%' IDENTIFIED BY 'ABcd_147';
3.存储过程、函数授权
1)存储过程、函数授权
权限:
create routine 创建存储过程、函数
alter routine 修改或删除存储过程、函数
execute 执行或调用存储过程、函数
授权:
GRANT create routine ON testown.* TO username@'%' IDENTIFIED BY 'ABcd_147';
GRANT alter routine ON testown.* TO username@'%' IDENTIFIED BY 'ABcd_147';
GRANT execute ON testown.* TO username@'%' IDENTIFIED BY 'ABcd_147';
存储过程和函数如果是root创建的话普通用户是无法查看和调用的,此时需考虑DEFINER。
在创建存储过程、函数时会默认指定DEFINER
(查询mysql手册:SQL SECURITY { DEFINER | INVOKER } :指明谁有权限来执行。
DEFINER 表示按定义者拥有的权限来执行;INVOKER 表示用调用者的权限来执行。)
虚拟机重新建一个mysql连接:发现root实际操作的数据库和普通用户操作的数据库之间少了mysql(原因有查阅到大佬的博客,下附转载链接)
2)重新授权mysql库给普通用户
GRANT all privileges ON mysql.* TO username@'%' IDENTIFIED BY 'ABcd_147';
3)用普通用户打开可以查看和调用
提示:以上存储过程和函数尽量由相应的用户来创建,尽量不要用root创建,否则就会出现这种尴尬的问题。
4. 刷新权限
flush privileges;
5. 登录目标用户测试
6. 其他
1)删除权限
REVOKE select,update,insert,delete ON zkry_xz_mszj.* from username@'%';
2)删除用户
delete from mysql.user where user='username' and host='%';(这个语句不能完全删除user='username')
3)完全删除用户
drop user 'username';
7.用户权限查询
1)用户表查询
select * from mysql.user where user = 'username';
2)授权查询
show grants from username;
[假如此处有分隔线]
转载:记一次mysql神奇现象--root可以看到函数内容,普通用户看不到?_阿里云rdsmysql写完函数在别的用户不显示-CSDN博客