MySQL5.7创建数据库与添加用户、删除用户及授权、保证数据库账号安全
目錄
1、創建數據庫
2、MySQL添加用戶、刪除用戶、更改密碼及授權
2.1、添加用戶
2.2、刪除用戶
2.3、更改密碼
2.4、授權
2.5、查看用戶權限
?3、拓展學習
3.1、MySQL數據庫如何定義賬號
3.2、MySQL常見用戶權限
3.3、查看當前數據庫所有用戶權限
3.4、回收權限
3.5、查看用戶權限
3.6、刪除用戶
3.7、修改密碼
3.8、重置root密碼
3.9、如何保證數據庫賬號安全?
mysql.user表字段解析
MySQL安裝啟動成功后,首先我們需要創建數據庫,然后創建一個用戶去操作這個數據庫。
1、創建數據庫
// 登錄MySQL客戶端:mysql -h [ip] -u[username] -p[password] C:\Users\Administrator>mysql -h 127.0.0.1 -uroot -p"root" // 創建數據庫,指定字符集 mysql> CREATE DATABASE `apollodb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; // 查看數據庫是否創建成功 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | apollodb | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)//如果庫名寫錯了,當然如果庫名創建錯了,也可以使用命令進行刪除,然后重新創建: mysql> drop database apollodb;2、MySQL添加用戶、刪除用戶、更改密碼及授權
2.1、添加用戶
跟以往版本不同,MySQL5.7 mysql.user表沒有password字段,這個字段改成了?authentication_string;
這里我們使用命令進行創建用戶:
// 創建了一個名為:dev001 密碼為:123456 的用戶 mysql> create user 'dev001'@'localhost' identified by '123456'; // 注意:此處的"localhost",是指該用戶只能在本地登錄,不能在另外一臺機器上遠程登錄。 // 如果想遠程登錄的話,將"localhost"改為"%",表示在任何一臺電腦上都可以登錄。 // 也可以指定某臺機器ip可以遠程登錄。 // ##### 實際開發用“%”方式 ##### mysql> create user 'dev001'@'%' identified by '123456';- username:你將創建的用戶名。
- host:指定該用戶在哪個主機上可以登陸,此處的"localhost",是指該用戶只能在本地登錄,不能在另外一臺機器上遠程登錄,如果想遠程登錄的話,將"localhost"改為"%",表示在任何一臺電腦上都可以登錄;也可以指定某臺機器可以遠程登錄。
- password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器。
2.2、刪除用戶
// 刪除用戶“dev001” mysql> drop user dev001@localhost ; // 若創建的用戶允許任何電腦登陸,刪除用戶如下 mysql> drop user dev001@'%';2.3、更改密碼
// 方法1,密碼實時更新;修改用戶“dev001”的密碼為“1qaz@WSX” mysql> set password for dev001=password('1qaz@WSX');// 方法2,需要刷新;修改用戶“dev001”的密碼為“1qaz@WSX” mysql> update mysql.user set password=password('1qaz@WSX') where user='dev001' // 刷新權限 mysql> flush privileges;2.4、授權
// 策略一:授予用戶kvstore通過外網IP對數據庫“apollodb”的全部權限 mysql> grant all privileges on apollodb.* to 'dev001'@'%' identified by '1qaz@WSX'; // 刷新權限 mysql> flush privileges;// 策略二:授予用戶“dev001”通過外網IP對于該數據庫“apollodb”中表的創建、修改、刪除權限,以及表數據的增刪查改權限 mysql> grant create,alter,drop,select,insert,update,delete on apollodb.* to dev001@'%'; // 刷新權限 mysql> flush privileges;// 策略三:授權dev001用戶擁有所有數據庫的某些權限 mysql> grant select,delete,update,create,drop on *.* to dev001@'%' identified by '1qaz@WSX'; // 刷新權限 mysql> flush privileges;privileges:用戶的操作權限,如select,delete,update,create,drop等;如果要授予所有的權限可使用all;% 表示對所有非本地主機授權,不包括localhost。
2.5、查看用戶權限
// 查看用戶“dev001” mysql> show grants for dev001; +------------------------------------------------------+ | Grants for dev001@% | +------------------------------------------------------+ | GRANT USAGE ON *.* TO 'dev001'@'%' | | GRANT ALL PRIVILEGES ON `apollodb`.* TO 'dev001'@'%' | +------------------------------------------------------+ 2 rows in set (0.00 sec)// MySQL通過權限表來控制用戶對數據庫的訪問,權限表放在mysql數據庫中,常見的有user表。 mysql> use mysql; Database changed // 查看用戶權限 mysql> select user,host from user; +---------------+-----------+ | user | host | +---------------+-----------+ | dev001 | % | | dev001 | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 5 rows in set (0.02 sec)mysql>注意:修改完權限以后 一定要刷新服務,或者重啟服務,刷新服務用:flush privileges;
最后用MySQL的dev001用戶登錄查看是否有對apollodb數據庫的操作權限:
C:\Users\Administrator>mysql -h 192.168.0.200 -udev001 -p"1qaz@WSX" mysql> mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | apollodb | +--------------------+ 2 rows in set (0.00 sec)mysql> show grants for dev001; +------------------------------------------------------+ | Grants for dev001@% | +------------------------------------------------------+ | GRANT USAGE ON *.* TO 'dev001'@'%' | | GRANT ALL PRIVILEGES ON `apollodb`.* TO 'dev001'@'%' | +------------------------------------------------------+ 2 rows in set (0.00 sec)
?3、拓展學習
3.1、MySQL數據庫如何定義賬號
用戶名@可訪問控制列表
如文章開頭的數據表查詢,解析如下:
-
(root, localhost) 表示只可以在部署mysql的服務器上登錄;
-
(root, 192.168.1.%) 表示可以在192.168.1網段登錄MySQL;
-
(root, %) 表示可以從除了本地外的所有外部主機登錄,即允許遠程登錄;
-
(root, sla01) 表示主機名為sla01可以登陸(可以在/etc/hostname查看sla01代表哪臺服務器。
3.2、MySQL常見用戶權限
| 管理員 | create user | 建立新用戶的權限 |
| grant option | 為其它用戶授權的權限 | |
| super | 管理服務器的權限 | |
| DDL | create | 新建數據庫,表的權限 |
| alter | 修改表結構的權限 | |
| drop | 刪除數據庫,表的權限 | |
| index | 建立刪除索引的權限 | |
| DML | select | 查詢表數據的權限 |
| insert | 表中插入數據的權限 | |
| update | 更新表中數據的權限 | |
| delete | 刪除表中數據的權限 | |
| execute | 執行存儲過程的權限 |
3.3、查看當前數據庫所有用戶權限
mysql> show privileges; +-------------------------+---------------------------------------+-------------------------------------------------------+ | Privilege | Context | Comment | +-------------------------+---------------------------------------+-------------------------------------------------------+ | Alter | Tables | To alter the table | | Alter routine | Functions,Procedures | To alter or drop stored functions/procedures | | Create | Databases,Tables,Indexes | To create new databases and tables | | Create routine | Databases | To use CREATE FUNCTION/PROCEDURE | | Create temporary tables | Databases | To use CREATE TEMPORARY TABLE | | Create view | Tables | To create new views | | Create user | Server Admin | To create new users | | Delete | Tables | To delete existing rows | | Drop | Databases,Tables | To drop databases, tables, and views | | Event | Server Admin | To create, alter, drop and execute events | | Execute | Functions,Procedures | To execute stored routines | | File | File access on server | To read and write files on the server | | Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess | | Index | Tables | To create or drop indexes | | Insert | Tables | To insert data into tables | | Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) | | Process | Server Admin | To view the plain text of currently executing queries | | Proxy | Server Admin | To make proxy user possible | | References | Databases,Tables | To have references on tables | | Reload | Server Admin | To reload or refresh tables, logs and privileges | | Replication client | Server Admin | To ask where the slave or master servers are | | Replication slave | Server Admin | To read binary log events from the master | | Select | Tables | To retrieve rows from table | | Show databases | Server Admin | To see all databases with SHOW DATABASES | | Show view | Tables | To see views with SHOW CREATE VIEW | | Shutdown | Server Admin | To shut down the server | | Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. | | Trigger | Tables | To use triggers | | Create tablespace | Server Admin | To create/alter/drop tablespaces | | Update | Tables | To update existing rows | | Usage | Server Admin | No privileges - allow connect only | +-------------------------+---------------------------------------+-------------------------------------------------------+ 31 rows in set (0.00 sec)3.4、回收權限
命令:
revoke [insert,delete,update,select ...] on Databasename.Tablename from 'username'@'ip';3.5、查看用戶權限
命令:
show grants for 'username'@'ip';3.6、刪除用戶
drop user 'username'@'ip';3.7、修改密碼
update mysql.user set authentication_string=password('password') where user='root' and host = 'localhost'; flush privileges; # 新設置用戶或更改密碼后需用flush3.8、重置root密碼
修改MySQL的配置文件(my.ini),在[mysqld]下添加一行skip-grant-tables,重啟MYSQL后就不需要密碼了。
重啟后,mysql -u root -p登入數據庫
update mysql.user set authentication_string=password('password') where user='root' and host = 'localhost';
flush privileges;
刪除skip-grant-tables這一行,重新啟動 MySQL。
3.9、如何保證數據庫賬號安全?
最小權限原則;
復雜密碼強度策略;
密碼過期和限制重用原則;
mysql.user表字段解析
| 字段名稱 | 說明 |
| 權限列 | |
| Host | 主機名,值為%時表示允許非本地的其它所有機器登錄 |
| User | 用戶名 |
| Select_priv | 確定用戶是否有權限使用select命令查詢數據 |
| Insert_priv | 確定用戶是否有權限使用insert命令插入數據 |
| Update_priv | 確定用戶是否有權限使用update命令更新數據 |
| Delete_priv | 確定用戶是否有權限使用DELETE命令刪除數據 |
| Create_priv | 確定用戶是否有權限使用create命令創建數據庫和表 |
| Drop_priv | 確定用戶是否有權限使用drop命令刪除數據庫和表 |
| Reload_priv | 確定用戶是否有權限執行刷新和重新加載MySQL所用各種內部緩存的特定命令,包括日志、權限、主機、查詢和表重新加載權限表 |
| Shutdown_priv | 確定用戶是否有權限關閉MySQL服務器在將此權限提供給root賬戶之外的任何用戶時 |
| Process_priv | 確定用戶是否有權限通過SHOW PROCESSLIST命令查看其他用戶的進程? |
| File_priv | 確定用戶是有權限執行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
| Grant_priv | ? |
| References_priv | ? |
| Index_priv | ? |
| Alter_priv | ? |
| Show_db_priv | ? |
| Super_priv | ? |
| Create_tmp_table_priv | ? |
| Lock_tables_priv | ? |
| Execute_priv | ? |
| Repl_slave_priv | ? |
| Repl_client_priv | ? |
| Create_view_priv | ? |
| Show_view_priv | ? |
| Create_routine_priv | ? |
| Alter_routine_priv | ? |
| Create_user_priv | ? |
| Event_priv | ? |
| Trigger_priv | ? |
| Create_tablespace_priv | ? |
| 安全列 | |
| ssl_type | 支持ssl標準加密安全字段 |
| ssl_cipher | 支持ssl標準加密安全字段 |
| x509_issuer | 支持x509標準字段 |
| x509_subject | 支持x509標準字段 |
| password_expired | 密碼是否過期。Y:說明該用戶密碼已過期 N:沒有過期 |
| password_last_changed | ? |
| password_lifetime | ? |
| plugin | 5.5.7開始,mysql引入plugins以進行用戶連接時的密碼驗證,plugin創建外部/代理用戶 |
| authentication_string | 通過authentication_string可以控制兩者的映射關系,(PAM plugin等,PAM可以支持多個服務名) |
| ? | ? |
| 資源控制列 | |
| max_questions | 每小時允許執行多少次查詢:0表示無限制 |
| max_updates | 每小時可以執行多少次更新:0表示無限制 |
| max_connections | 每小時可以建立的多少次連接:0表示無限制 |
| max_user_connections | 單用戶可以同時具有的連接數:0表示無限制 |
| account_lock | |
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的MySQL5.7创建数据库与添加用户、删除用户及授权、保证数据库账号安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 出师表《80后传》
- 下一篇: 在linux命令行中直接执行php命令