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


導讀

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

Linux安裝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網段登錄

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庫所有權限

語法:
創建用戶
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的記錄刪除!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM