Linux上Mysql數據庫 用戶權限控制

導讀

  你們或許都聽過程序員刪庫跑路,可想而知,若是對用戶開放太多的數據庫操做權限,操做不當,可能會形成意想不到的損失,經過本篇學習,能夠熟練掌握mysql用戶權限的控制。固然啦,數據被刪掉,可使用技術手段(binlog)恢復回去的,過幾天更新~html

Linux安裝mysql

  點我直達mysql

Mysql限制root用戶ip地址登陸

修改mysql庫裏邊的user表:
update mysql.user set host='localhost' where user='root';

刷新權限:
flush privileges;

修改密碼 

忘記密碼

編輯my.cnf,並添加:skip-grant-tables

編輯my.cnf
vim /usr/local/mysql/my.cnf 


==================
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小寫不明感,敏感爲
lower_case_table_names=1
#跳過權限表,添加該命令
skip-grant-tables 

重啓mysql服務

service mysql restart

登陸mysql,並修改密碼

mysql -uroot -p


直接回車不用輸入密碼!!!!!!!!
而後使用下面3種修改密碼之一便可

修改密碼

方式一

  連到數據庫中修改密碼程序員

格式:
set password for 用戶名@ip =password('密碼');
alter user '用戶'@'ip' identified by '密碼';

刷新權限:
flush privileges;

示例
set password for root@127.0.0.1 = password('root');

方式二

格式:
./mysqladmin -u用戶 -p舊密碼 password 新密碼

方式三

格式:
select * from mysql.user where user='root' \G;

update mysql.user set authentication_string=password('123456') where user='root';

刷新權限:
flush privileges;

建立用戶並限制ip登陸

建立用戶

語法:
create user '用戶名'@'ip' identified by '密碼';

用戶名:建立的帳戶
ip:指定該用戶在哪一個主機上能夠登陸,若是是本地用戶可用localhost,若是想讓該用戶能夠在任意遠程主機登陸,可使用通配符:%
密碼:該用戶的登陸密碼,密碼能夠爲空,若是爲空,則該用戶能夠不須要密碼登陸服務器
查看權限:
show grants for '用戶名'@'ip';
查看用戶權限:
select * from mysql.user where user='用戶' \G;

mysql> select * from mysql.user where user='ybchen' \G;
*************************** 1. row ***************************
                  Host: %
                  User: ybchen
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: *D2EDE838B7E0B05A2C599D3E1F5821D0ADC4F26E
      password_expired: N
 password_last_changed: 2020-11-19 23:26:12
     password_lifetime: NULL
        account_locked: N
1 row in set (0.00 sec)

建立一個用戶,並指定密碼,限制網段登陸

  適用於只能在公司內網環境下開發程序,外網登陸不上,限制:172.20網段登陸sql

create user 'ybchen'@'172.20.%.%' identified by '123456';

刪除用戶

語法:
drop user '用戶'@'ip';
語法:
delete from mysql.user where user='用戶';

授予用戶庫表權限

受權

語法:
grant 權限1,權限2... on 數據庫 to '用戶'
grant 權限1,權限2... on 數據庫 to '用戶'@'ip' identified by '密碼'

  對cyb用戶授予全部庫全部表全部權限數據庫

all privileges:表明全部權限
*.*:表明全部庫全部表

grant all privileges on *.* to 'cyb';

  授予cyb2用戶,db1庫全部權限vim

語法:
建立用戶
create user 'cyb2'@'%' identified by 'cyb2';
授予cyb2用戶,db1庫的全部權限
grant all privileges on db1.* to 'cyb2'@'%' identified by 'cyb2';
刷新權限
flush privileges;

  授予cyb3用戶,db1庫student的查詢權限(只有增刪改查權限,沒有新建表、刪除表權限)服務器

語法:
建立用戶
create user 'cyb3'@'%' identified by 'cyb3';
授予cyb3用戶,db1庫student,增刪改查權限
grant insert,select,update,delete on db1.student to 'cyb3'@'%' identified by 'cyb3';
刷新權限
flush privileges;

移除權限

語法:
revoke 權限1,權限2... on 數據庫對象 from '用戶'@'ip'
revoke all privileges on *.* from 'cyb'@'%';
flush privileges;

注意

  這種移除權限,可是用戶仍是能夠正常登錄的,若是讓用戶登錄都登不上,須要將mysql.user的記錄刪除!ide

相關文章
相關標籤/搜索