修改mysql密碼和權限


 

修改mysql密碼

這個命令是對的。不過有要求。下面有改要求的辦法。或者可以根據ta要求的設定密碼

ALTER USER 'root'@'172.16.5.125' IDENTIFIED BY '123456';

[Err] 1819 - Your password does not satisfy the current policy requirements

--解決方法:

查看 mysql 初始的密碼策略(mysql5.7自帶的)

 SHOW VARIABLES LIKE 'validate_password%'; 

image-20200426114023485

關於 mysql 密碼策略相關參數;
1)、validate_password_length  固定密碼的總長度;
2)、validate_password_dictionary_file 指定密碼驗證的文件路徑;
3)、validate_password_mixed_case_count  整個密碼中至少要包含大/小寫字母的總個數;
4)、validate_password_number_count  整個密碼中至少要包含阿拉伯數字的個數;
5)、validate_password_policy 指定密碼的強度驗證等級,默認為 MEDIUM;

關於 validate_password_policy 的取值:
0/LOW:只驗證長度;
1/MEDIUM:驗證長度、數字、大小寫、特殊字符;
2/STRONG:驗證長度、數字、大小寫、特殊字符、字典文件;
6)、validate_password_special_char_count 整個密碼中至少要包含特殊字符的個數;

原文鏈接:https://blog.csdn.net/hello_world_qwp/article/details/79551789

如何設置簡單的密碼

2、首先需要設置密碼的驗證強度等級,設置 validate_password_policy 的全局參數為 LOW 即可,
輸入設值語句 “ set global validate_password_policy=LOW; ” 進行設值,

3、當前密碼長度為 8 ,如果不介意的話就不用修改了,按照通用的來講,設置為 6 位的密碼,設置 validate_password_length 的全局參數為 6 即可,
輸入設值語句 “ set global validate_password_length=6; ” 進行設值,
4、現在可以為 mysql 設置簡單密碼了,只要滿足六位的長度即可,
輸入修改語句 “ ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; ” 可以看到修改成功,表示密碼策略修改成功了!!!

 

執行這個命令時報錯。

ALTER USER 'root'@'localhost' IDENTIFIED BY '_12345Qa';

error:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

https://blog.csdn.net/jgj0129/article/details/53420574

👆好像是navcat的錯誤。

ALTER USER 'root'@'172.16.5.125' IDENTIFIED BY '_12345Qa';

[Err] 1396 - Operation ALTER USER failed for 'root'@'172.16.5.125'

set global validate_password_policy=LOW;

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

LINUX重啟MYSQL的命令

systemctl restart mysqld.service

同事說改完要刷新的命令

FLUSH PRIVILEGES 
mysql -uroot -p1qaz@WSX

error:-bash: !qaz2WSX: event not found

原因為您所輸入的命令中間包含 !,嘆號,不能組成命令。

應該將 !轉義。

image-20200426132256295

mysql修改密碼

格式:mysql> set password for 用戶名@localhost = password('新密碼');  
 set password for root@localhost = password('1qaz@WSX');

image-20200426132750762

抄自:https://www.cnblogs.com/mrhonest/p/10881646.html

 

mysql拒絕訪問就要想到授權的問題

因為沒有授權,所以拒絕訪問

為什么訪問的172.16.5.125--->172.31.8.35error

image-20200426150340776

授權本地

grant all privileges on  *.* to 'root'@'localhost' identified by '1qaz@WSX';

授權所有所有ip訪問 ‘%’

grant all privileges on  *.* to 'root'@'%' identified by '1qaz@WSX';
grant all privileges on  *.* to 'ly'@'%' identified by '1qaz@WSX';

為什么會有密碼不符合的情況?

image-20200426150600964

navicat連接了數據庫(連接名是隨便起的)。

顯示的是所有的,還以為是只一個database呢。應該是所有的。

image-20200426153313367

 

navicat和我就很迷

之前在navicat里設置的這兩項。。。

set global validate_password_policy=LOW;
set global validate_password_length=6;

image-20200426153933696

怎么在mysql中查了下,又這樣了。我吃

在改下密碼吧:grant all privileges on *.* to 'root'@'%' identified by '123456';

set global validate_password_policy=MEDIUM;
set global validate_password_length=8;

算了,不改了,就復雜的密碼吧。

 

 

我的linux系統里查看mysql密碼的命令

select *from mysql.user; 這些列里也沒有密碼password阿

| Host         | User         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | 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_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin               | authentication_string                     | password_expired | password_last_changed | password_lifetime | account_locked |

image-20200426155025194

https://blog.csdn.net/qq_40662239/article/details/90521588為什么這人的有。。。

抄襲博客。。。

Navicat for Mysql修改MySQL數據庫密碼,圖文詳解

https://www.cnblogs.com/zui-ai-java/p/10411000.html

MySQL修改密碼

https://www.cnblogs.com/mrhonest/p/10881646.html

mysql授權IP登錄

https://www.cnblogs.com/shihx/p/12046563.html

Linux中安裝mysql、查看修改mysql原始密碼、mysql數據導入、檢查是否安裝了mysql、如何啟動mysql服務

https://www.csdn.net/gather_2f/MtTaIgzsNTY3NS1ibG9n.html

如何給mysql的普通用戶賦予權限

https://blog.csdn.net/qq_36470898/article/details/100189795

MySQL 查看用戶授予的權限⭐⭐⭐

https://www.cnblogs.com/kerrycode/p/7423850.html

MySql授權和撤銷權限操作⭐⭐⭐

https://www.cnblogs.com/qlqwjy/p/8022575.html

image-20200426232316889

【當你用心寫完每一篇博客之后,你會發現它比你用代碼實現功能更有成就感!】

 

mysql創建普通用戶

create user ly identified by 'ly123';
給予用戶數據庫的所有權限
 grant all on shanghui.* to 'shanghui'@'%';
刷新數據庫
flush privileges;

 

mysql普通用戶如果要登錄,可以在mysqlroot里給授權

授予權限要在root用戶里授予
  grant 權限 on *.* to '用戶'@'ip';
 
比如所有庫的查詢權限,就: *.* 代表所有庫下的所有表
 grant select on *.* to '用戶'@'ip';
 
所有權限的話
 grant all privileges on *.* to '用戶'@'ip';
 
賦權限后記得刷新: flush privileges;  

%代表所有ip

授權本機
grant all privileges on *.* to 'ly'@'localhost' identified by 'ly123';
授權其他
grant all privileges on *.* to 'ly'@'%' identified by 'ly123';
grant all privileges on *.* to 'ly'@'localhost' identified by '1qaz@WSX';
grant all privileges on *.* to 'ly'@'%' identified by '1qaz@WSX';

設置查看的權限

SELECT、 INSERT、 UPDATE、 DELETE(其他的)

grant select,insert  on *.* to 'ly'@'%' identified by '1qaz@WSX';
grant select,insert  on *.* to 'ly'@'localhost' identified by '1qaz@WSX';
flush privileges;  

image-20200426170716775

授權。不要忘記了本機'localhost'或者其他機器'%'授權

image-20200426170929067

就可以登了。。。

查看普通用戶授予的授權

show grants for 用戶名;
show grants for ly;

授予all privileges 或者select 權限的問題

image-20200426184424951

明明給了select 權限,但是確是all privileges權限的問題。

精致boy說: 權限改動以后都會記錄 之前的要手動刪除

我就去搜了撤銷的命令。

撤銷已經賦予mysql用戶權限的權限

revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:

revoke all on *.* from dba@localhost; 
grant all privileges on *.* to 'ly'@'%' identified by '1qaz@WSX';
revoke all privileges on *.* from 'ly'@'%' identified by '1qaz@WSX';

上面的語句會報錯:(不知道什么原因阿)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '1qaz@WSX'' at line 1;

 

image-20200426224338987

因為看到這個想起相反的命令(如下)。(試了下果然可以)

revoke ALL PRIVILEGES on *.* from 'ly'@'%' ;

image-20200426221037141

如果先設置了ALL PRIVILEGES權限,就要先移除了這個權限,才可以設置其他的小權限(select, insert....)

image-20200426225016447

ps:USAGE :“無權限”

如果先設置了設置其他的小權限(select, insert....),不需要先移除了這個權限,可直接設置ALL PRIVILEGES權限

image-20200426225129007

 

mysql 授予用戶只對一個庫的權限

grant select, insert, update, delete on xj4k.* to ly@localhost ;    

這個因為是local的所以不起作用吧。應該是@‘%’才對吧。

設置對一個庫的增刪改的命令。

grant select, insert, update, delete on xj4k.* ;

為什么權限有兩行呢?

image-20200426234505110

這樣就可以只對xj4k有權限,對其他的數據庫沒有

這么多數據庫呢👇

image-20200426234701558

抄自:

MySQL 數據庫賦予用戶權限操作表

https://www.cnblogs.com/goodhacker/p/3373213.html

MySQL設置某一用戶只對一個數據庫擁有所有權限

https://blog.csdn.net/weixin_43739146/article/details/102789473

image-20200426234715678

大數據平台上的可以只操作一個我需要的數據庫的表了,清爽。

image-20200426234804131

看root用戶有所有表的權限那么多表,看不過來。

真好。

GRANT SELECT, INSERT, UPDATE, DELETE ON `xj4k`.* TO 'ly'@'%'; #設置了這么多權限,竟然沒法添加表
GRANT all ON `xj4k`.* TO 'ly'@'%';  #all就可以了,缺什么呢?

image-20200428171617728

撤銷權限(復制上面改revoke和from)

revoke SELECT, INSERT, UPDATE, DELETE ON `xj4k`.* from 'ly'@'%'

image-20200426235121723

沒了

用上面那個長的:

grant select, insert, update, delete on xj4k.* to ly @ '%' ;

這個命令為什么行不通啊?哪里寫錯了呀!

主鍵沖突

在數據插入的時候,假設主鍵對應的值已經存在,則插入失敗!這就是主鍵沖突。

https://www.cnblogs.com/luffe/p/7865316.html

當主鍵存在沖突(duplicate key)的時候,可以選擇性的進行處理,即忽略、更新或者替換。

原文摘抄:

1.忽略
insert ignore into table
保持原記錄,忽略新插入的記錄

2.替換
replace into table
替換原記錄,即先刪除原記錄,再插入新的記錄

3. 更新
insert into table value("xx","xx") ON DUPLICATE KEY UPDATE
其實這個是原本需要執行3條SQL語句(SELECT,INSERT,UPDATE),縮減為1條語句即可完成。


IF (SELECT * FROM where 存在) {
   UPDATE  SET  WHERE ;
} else {
   INSERT INTO;
}
如:

mysql> insert into Table values (1,'xxx','xxx') ON DUPLICATE KEY UPDATE status ='drain';
Query OK, 2 rows affected (0.00 sec)
上面語句偽代碼表示即為

if (select * from table where id=1) {
   update device set status ='drain' where id=1
} else {
   insert into table value (1,'xxx','xxx')
}
很明顯,id=1 是有的,這樣就執行update操作

mysql> select * from table;
+-------+--------+-----------+
|     id| status | spec_char |
+-------+--------+-----------+
|     1 | drain | yangting |
|     2 | dead   | zhong     |
+-------+--------+-----------+
2 rows in set (0.00 sec)

 


免責聲明!

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



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