原文地址:https://www.douyacun.com/article/037692362cc43e63d94881bc5dde791a
mysql用户账户管理
- 授权相当于root权限的账户 liuning 任何地点都可以登录 密码123456
第一种方式:
grant all privileges
-> on *.* to 'liuning'@'%' // on 将数据库中的表授权给刘宁 % 表示任意地点可以登录
-> identified by '123456' // 指定密码验证
-> with grant option // 授权资源限制
第二种方式:
insert into user
-> values('localhost','liuning',password('123456'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
FLUSH PRIVILEGES; // 重载授权表
- 授权账户访问某个数据库
第一种方式:
grant select,update,insert,delete,drop
-> on demo.* # 授权liuning demo数据库中的所有表
-> to 'liuning'@'locahost' # 只能本机登录
-> identified by '123456'
第二种方式:
insert into user (Host,User,Password)
-> values('douyacun.cn','liuning',password('123456'));
flush privileges;
grant select,update,insert,delete,drop,create
on `byidb`.`other*`
to "aiqiyi"@"%" identified by '123456';
- width 设置资源限制
GRANT ALL ON customer.* TO 'francis'@'localhost'
-> IDENTIFIED BY 'frank'
-> WITH MAX_QUERIES_PER_HOUR 20 // 账户每小时可以发出的查询数
-> MAX_UPDATES_PER_HOUR 10 // 账户每小时可以发出的更新数
-> MAX_CONNECTIONS_PER_HOUR 5 // 账户每小时可以连接服务器的次数
-> MAX_USER_CONNECTIONS 2; // 表示账户一次可以同时连接的最大连接数
要想设置或更改已有账户的限制,在全局级别使用GRANT USAGE语句(在*.*)。下面的语句可以将francis的查询限制更改为100:
mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
-> WITH MAX_QUERIES_PER_HOUR 100;
- 设置账户密码
mysqladmin -u root -h "%" password "123456"
或者
SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
mysql服务器授权表
- 权限表
- user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。
- db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。
- host表不受GRANT和REVOKE语句的影响。大多数MySQL安装根本不需要使用该表。
- tables_priv和columns_priv表类似于db表,但是更精致:它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列。授予列级别的权限只适用于专用列。
- procs_priv表适用于保存的程序。授予程序级别的权限只适用于单个程序。
- 当你修改授权表的内容时,确保你按你想要的方式更改权限设置是一个好主意。要检查给定账户的权限,使用SHOW GRANTS语句。例如,要检查Host和User值分别为pc84.example.com和bob的账户所授予的权限,应通过语句:
show grants for 'liuning'@'%';
mysql提供的权限
权限 | 列 | 上下文 |
---|---|---|
create | Create_priv | 数据库、表或索引 创建新数据库和表, |
drop | DROP | 数据库、表 或删除(移掉)已有数据库和表 |
grant option | Grant_priv | 数据库、表或保存的程序 允许你把你自己拥有的那些权限授给其他的用户。可以用于数据库、表和保存的程序。 |
REFERENCES | References_priv | 数据库或表 |
alter | Alter_priv | 表 更改表的结构和重新命名表。 |
delte | Delete_priv | 表 |
index | INDEX_priv | 表 允许创建或删除索引 |
insert | Insert_priv | 表 |
select | Select_priv | 表 |
update | Update_priv | 表 |
create view | Create_view_priv | 视图 |
show view | Show_view_priv | 视图 |
alter routine | Alter_routine_priv | 保存的程序 更改和删除保存的程序 |
create routine | Create_routine_priv | 保存的程序 创建保存的程序(函数和程序) |
execute | Execute_priv | 保存的程序 执行保存的程序 |
file | FILE_priv | 服务器主机上的文件访问 你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件 |
create temporary tables | Create_tmp_table_priv | 服务器管理 |
lock tables | Lock_tables_priv | 服务器管理 |
create user | Create_user_priv | 服务器管理 |
provess | PROCESS_priv | 服务器管理 processlist |
relaod | reload_priv | 服务器管理 允许执行 flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload |
replication client | Repl_client_priv | 服务器管理 |
replication slave | Repl_slave_priv | 服务器管理 |
show databases | Show_db_priv | 从服务器管理 |
shutdown | Shutdown_priv | 服务器管理 shutdown |
super | Super_priv | 服务器管理 kill |
usage | 0 | 创建用户不给于任何权限 |
数据库连接,访问控制
服务器基于你的身份以及你是否能通过供应正确的密码验证身份来接受或拒绝连接。如果不是,服务器完全拒绝你的访问,否则,服务器接受连接,然后进入阶段2并且等待请求。
- 你从那个主机连接
- 你的MySQL用户名
- 验证(Host, User和Password)范围列执行
- CURRENT_USER()函数 判断验证连接
实际授权 实例
mysql> grant select, insert, update, delete, create view, show view
-> on yar.*
-> to 'liuning'@'%'
-> identified by '123456';
mysql> show grants for 'liuning'@'%';
取消给用户的权限
mysql> revoke all
-> on yar.*
-> from 'liuning'@'%';