mysql-8.0.11-winx64 安裝配置: mysqld --initialize --console MYSQL:ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost——MySQL5.7修改密碼
mysql-8.0.11 不再有 my.ini 配置文件了. 通過mysqld --initialize --console 自動生成MYSQL的初始化配置(data文件目錄等).
用戶名密碼: 這一步才是關(guān)鍵!!! 記得加上 --console 參數(shù)!
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld --initialize --console
2018-05-24T18:31:49.968235Z 0 [System] [MY-013169] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysq
ld 8.0.11) initializing of server in progress as process 34224
2018-05-24T18:31:56.947634Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qk-nm1!hE/4r
2018-05-24T18:32:00.694848Z 0 [System] [MY-013170] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysq
ld 8.0.11) initializing of server has completed
使用日志中打印的密碼: qk-nm1!hE/4r
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qk-nm1!hE/4r
命令行登陸 mysql 終端:
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -uroot -p
Enter password: ************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.11
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
在執(zhí)行SQL腳本之前,會讓你先改密碼:
mysql>
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
登陸后執(zhí)行下面SQL .
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.03 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.02 sec)
mysql> use mysql;
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
33 rows in set (0.00 sec)
mysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | caching_sha2_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
| Create_role_priv | enum('N','Y') | NO | | N | |
| Drop_role_priv | enum('N','Y') | NO | | N | |
| Password_reuse_history | smallint(5) unsigned | YES | | NULL | |
| Password_reuse_time | smallint(5) unsigned | YES | | NULL | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
49 rows in set (0.00 sec)
這下子我們就可以使用 C:\Program Files\MySQL\MySQL Workbench 8.0 CE
客戶端工具直接連mysql數(shù)據(jù)庫了.
Windows上的 建議使用: mysql-installer-community-8.0.11.0.msi 安裝包進行安裝,不要直接使用 zip解壓免安裝的版本.
https://dev.mysql.com/downloads/windows/installer/8.0.html
MYSQL:ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost——MySQL 8.0.11 修改密碼
mysql-8.0.11-winx64配置
1陶耍、首先下載mysql-8.0.11-winx64.zip,并解壓到自定義目錄育韩。
我的安裝目錄為F:\software\eclipse J2EE\mysql-8.0.11-winx64\
2堕绩、配置文件
配置文件默認(rèn)是安裝目錄下的 my.ini 文件(或my-default.ini),沒有需要自己創(chuàng)建于个。
[mysqld]
# 設(shè)置3306端口
port=3306 # 設(shè)置mysql的安裝目錄
basedir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\
# 設(shè)置mysql數(shù)據(jù)庫的數(shù)據(jù)的存放目錄
datadir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\data
# 允許最大連接數(shù)
max_connections=200 # 允許連接失敗的次數(shù)。這是為了防止有人從該主機試圖攻擊數(shù)據(jù)庫系統(tǒng)
max_connect_errors=10 # 服務(wù)端使用的字符集默認(rèn)為UTF8
character-set-server=utf8
# 創(chuàng)建新表時將使用的默認(rèn)存儲引擎 default-storage-engine=INNODB
# 默認(rèn)使用“mysql_native_password”插件認(rèn)證
default_authentication_plugin=mysql_native_password
[mysql]
# 設(shè)置mysql客戶端默認(rèn)字符集 default-character-set=utf8
[client]
# 設(shè)置mysql客戶端連接服務(wù)端時默認(rèn)使用的端口
port=3306
default-character-set=utf8</pre>
注意,里面的 basedir 是我本地的安裝目錄壁酬,datadir 是我數(shù)據(jù)庫數(shù)據(jù)文件要存放的位置,各項配置需要根據(jù)自己的環(huán)境進行配置恨课。
3舆乔、初始化數(shù)據(jù)庫
在MySQL安裝目錄的 bin 目錄下執(zhí)行命令:
mysqld --initialize --console
執(zhí)行完成后,會打印 root 用戶的初始默認(rèn)密碼剂公,在執(zhí)行輸出結(jié)果里面有一段:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E 其中root@localhost:
后面的“rI5rvf5x5G,E”就是初始密碼(不含首位空格)希俩。在沒有更改密碼前,需要記住這個密碼诬留,后續(xù)登錄需要用到斜纪。
要是你手賤,關(guān)快了文兑,或者沒記住盒刚,那也沒事,刪掉初始化的 datadir 目錄绿贞,再執(zhí)行一遍初始化命令因块,又會重新生成的。
4籍铁、安裝服務(wù)
在MySQL安裝目錄的bin目錄下按shift+右鍵執(zhí)行“在此處打開命令行窗口”
執(zhí)行mysqld --install和net start mysql安裝并啟動mysql涡上,如果關(guān)閉執(zhí)行net stop mysql
C:\Program Files\MySQL\bin>mysqld --install
Service successfully installed
C:\Program Files\MySQL\bin>net start mysql
5、登錄
在MySQL安裝目錄的bin目錄下按shift+右鍵執(zhí)行“在此處打開命令行窗口”
執(zhí)行mysql -u root -p拒名,輸入密碼吩愧。
6、修改密碼
登陸后執(zhí)行下面命令增显。
ALTER USER ``'root'``@``'localhost'
IDENTIFIED WITH mysql_native_password BY ``'新密碼'``;
7雁佳、配置環(huán)境變量
雖然MySQL安裝成功,但是每次都切換到:\mysql-5.7.17-winx64下來執(zhí)行相關(guān)操作是很麻煩的同云,配置環(huán)境變量后就可方便的操作MySQL了糖权。右鍵‘計算機’->‘屬性’->‘高級系統(tǒng)設(shè)置’->‘環(huán)境變量’,在系統(tǒng)變量下找到path炸站,點擊編輯按鈕進入編輯path對話框星澳,在變量值里面前面加上MySQL的解壓路徑下的bin目錄,我的是F:\software\eclipse J2EE\mysql-8.0.11-winx64\bin旱易,注意后面要加上英文分號禁偎,確定即配置好環(huán)境變量腿堤。
參考:http://www.jb51.net/article/139219.htm
https://www.cnblogs.com/cenwei/p/6249856.html
D:\soft\mysql-8.0.11-winx64>tree
文件夾 PATH 列表
卷序列號為 648E-144B
D:.
├─bin
├─data
│ ├─mysql
│ ├─performance_schema
│ └─sys
├─docs
├─include
│ ├─mysql
│ └─openssl
├─lib
│ ├─mecab
│ │ ├─dic
│ │ │ ├─ipadic_euc-jp
│ │ │ ├─ipadic_sjis
│ │ │ └─ipadic_utf-8
│ │ └─etc
│ └─plugin
│ └─debug
└─share
├─bulgarian
├─charsets
├─czech
├─danish
├─dutch
├─english
├─estonian
├─french
├─german
├─greek
├─hungarian
├─italian
├─japanese
├─korean
├─norwegian
├─norwegian-ny
├─polish
├─portuguese
├─romanian
├─russian
├─serbian
├─slovak
├─spanish
├─swedish
└─ukrainian
D:\soft\mysql-8.0.11-winx64\bin>tree /f
文件夾 PATH 列表
卷序列號為 648E-144B
D:.
echo.exe
ibd2sdi.exe
innochecksum.exe
libeay32.dll
libmecab.dll
lz4_decompress.exe
myisamchk.exe
myisamlog.exe
myisampack.exe
myisam_ftdump.exe
mysql.exe
mysqladmin.exe
mysqlbinlog.exe
mysqlcheck.exe
mysqld.exe
mysqld.pdb
mysqldump.exe
mysqldumpslow.pl
mysqld_multi.pl
mysqlimport.exe
mysqlpump.exe
mysqlshow.exe
mysqlslap.exe
mysqlxtest.exe
mysql_config.pl
mysql_config_editor.exe
mysql_secure_installation.exe
mysql_ssl_rsa_setup.exe
mysql_tzinfo_to_sql.exe
mysql_upgrade.exe
my_print_defaults.exe
perror.exe
resolveip.exe
ssleay32.dll
zlib_decompress.exe
重啟mysqld服務(wù)
在Windows中是這個界面:
WIN+R快捷鍵打開運行命令,并輸入services.msc届垫,按回車Enter即可進入.
輸入命令 mysqld install
提示:Service successfully installed.
安裝以后啟動mysql服務(wù)
輸入命令 net start mysql
5.7以上的版本可能會無法啟動释液,報錯:服務(wù)沒有報告任何錯誤。
輸入命令 mysqld --initialize
正常情況下無任何提示装处,自動空格一行误债,即代表初始化成功。
再重新啟動服務(wù)就可以開起來妄迁,原因是5.7安裝文件夾里面缺少data文件夾寝蹈,initialize以后會自動生成這個文件夾及其中文件。
命令行設(shè)置用戶名密碼
錯誤提示:
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
或者
# mysql -u root -p password 'newpassword'
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
現(xiàn)在終于找到解決方法了登淘。本來準(zhǔn)備重裝的箫老,現(xiàn)在不必了。
方法操作很簡單黔州,如下:
# /etc/init.d/mysqld stop //停止mysql服務(wù)的運行
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & //跳過受權(quán)表訪問
# mysql -u root mysql //登錄mysql
在mysql5.7以下的版本如下:
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='127.0.0.1' or host='localhost';//把空的用戶密碼都修改成非空的密碼就行了耍鬓。
在mysql5.7版本如下:
update mysql.user set authentication_string=password('newpassword') where user='root' and host='127.0.0.1' or host='localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit # /etc/init.d/mysqld restart //離開并重啟mysql
# mysql -uroot -p
Enter password: <輸入新設(shè)的密碼newpassword>
附:Mac上解決Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
首先安裝完mysql之后,在系統(tǒng)偏好設(shè)置里面會有mysql設(shè)置流妻,進去后可點擊啟動mysql server和關(guān)閉牲蜀。
出現(xiàn)問題的原因是mysql root用戶的密碼問題,我在網(wǎng)上找了好多種方法绅这,最后這種方法可行涣达,就記錄下來了,具體步驟看下面证薇。
解決步驟:
1度苔、首先在設(shè)置中關(guān)閉mysql服務(wù);
2浑度、然后打開終端寇窑,輸入:sudo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
再輸入:sudo mysql -u root mysql
進入mysql>
執(zhí)行以下命令:update user set password_expired = "Y" where user="root";
再輸入:flush privileges;這一步很重要
然后:quit
3、進行登陸
輸入:mysql -uroot -p
會提示你輸入密碼箩张,這個密碼就是安裝mysql時出現(xiàn)的
2017-12-13T09:25:15.976324Z 1 [Note] A temporary password is generated for root@localhost: ug&eyEFeo08n
If you lose this password, please consult the section How to Reset the
Root Password in the MySQL reference manual.
這段提示中疗认,密碼就是ug&eyEFeo08n,輸入即可伏钠。
4、登陸成功之后可以修改密碼:
set password for root@localhost = password('123456');
之后登陸就用123456這個密碼了谨设。
問題描述
今天在MAC上安裝完MYSQL后熟掂,MYSQL默認(rèn)給分配了一個默認(rèn)密碼,但當(dāng)自己在終端上使用默認(rèn)密碼登錄的時候扎拣,總會提示一個授權(quán)失敗的錯誤:Access denied for user ‘root’@’localhost’ (using passwor)如圖:
解決方案
既然現(xiàn)在沒法登錄到數(shù)據(jù)庫中赴肚,改密碼和添加用戶等操作也無從談起素跺。好在MySQL中還提供了一種免去密碼校驗進入數(shù)據(jù)庫的方法,我們就先使用這種方法登入到數(shù)據(jù)庫中誉券。然后將默認(rèn)密碼替換掉指厌,上面的問題就可以解決掉啦~具體操作如下(如果想要快速解決,可以直接看最下面的快速方案)
一踊跟、找到Mysql配置文件
這個操作踩验,在不同平臺下對應(yīng)的不同的操作文件
mac系統(tǒng)中配置文件是mysql安裝目錄support_file下的my-default文件
需要注意的是:默認(rèn)該配置文件不具備寫權(quán)限需要使用chmod命令先為該文件添加寫權(quán)限才能進行更改
ps:windows系統(tǒng)的配置文件是mysql安裝根目錄的my.ini文件
二、修改配置文件
打開剛才我們找到的配置文件商玫,然后在里面找到 [mysqld]
這一項箕憾,然后在該配置項下添加 skip-grant-tables
這個配置,然后保存文件拳昌。
三袭异、重啟mysql服務(wù)
為了使上一步的配置項生效,我們需要重啟MySQL的服務(wù)
Mac系統(tǒng)可以在系統(tǒng)偏好中進行重啟:
windows系統(tǒng)可以通過:在我的電腦上右鍵–>服務(wù)–>找到mysql服務(wù)進行重啟
linux系統(tǒng)可以使用:service mysqld restart來重啟
四炬藤、免密登錄MySQL
然后再次進入到終端當(dāng)中御铃,敲入 mysql -u root -p
命令然后回車,當(dāng)需要輸入密碼時沈矿,直接按enter鍵上真,便可以不用密碼登錄到數(shù)據(jù)庫當(dāng)中
五、修改默認(rèn)的密碼
使用 set password for 'username'@'host' = password('newpassword')
命令修改新的密碼细睡。
六谷羞、檢驗成果
我們改完默認(rèn)密碼后,再次進入到之前的配置文件中溜徙,將我們跳過密碼的那個配置行給刪除掉湃缎,變?yōu)橄到y(tǒng)原先的配置。重啟MySQL服務(wù)蠢壹,下次再登錄的時候便可以解決掉這個問題了嗓违。
快速方案
要是你覺得上面的操作過于麻煩,可以使用下面的快捷方式達(dá)到上面的效果图贸,針對mac系統(tǒng)為例:
首先進入到 /usr/local/mysql/support-file
這個目錄下,然后按照圖片上的步驟進行操作
進入mysql的安全模式后蹂季,鍵入圖中圈起來的四行配置(必須逐行輸入),輸入完成后使用 contrl+z
鍵結(jié)束輸入
然后再終端中使用 mysql -u root -p 同樣可以實現(xiàn)密碼登錄疏日,另外此時密碼也已經(jīng)修改為了 pass
偿洁,下次的登錄即可使用pass這個新密碼了。與上面的操作達(dá)成的效果是相同的沟优。
忘記密碼了怎么辦 或者說 想把root的空密碼改成有密碼涕滋?修改密碼方法如下:
方法一:
root密碼為空時用下面命令修改, 修改成12345:
mysqladmin -u root -p password 12345
不為空時 使用mysqladmin。假如原密碼為123456 挠阁,修改為12345 命令如下
mysqladmin -u root -p 123456 password "12345"
注意:更改的密碼不能用單引號宾肺,可用雙引號或不用引號
mysqladmin -u root -p oldpassword password “newpasswd”
執(zhí)行這個命令后溯饵,需要輸入root的原密碼,這樣root的密碼將改為newpasswd锨用。同樣丰刊,把命令里的root改為你的用戶名,你就可以改你自己的密碼了增拥。
當(dāng)然如果你的mysqladmin連接不上mysql server啄巧,或者你沒有辦法執(zhí)行mysqladmin,那么這種方法就是無效的跪者,而且mysqladmin無法把密碼清空
方法2:
/etc/init.d/mysql stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
/etc/init.d/mysqld restart
mysql -u root -p
Enter password:
mysql>
如果我們想看看還有哪些賬戶 可以用下面的命令:
在mysql環(huán)境中
mysql>select * from mysql.user ;
新增賬戶:
GRANT ALL PRIVILEGES ON . TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
monty對應(yīng)帳號 some_pass對應(yīng)密碼
增加一個用戶棵帽,用戶名為sa,密碼為123渣玲。注意要使用PASSWORD函數(shù)逗概,然后還要使用FLUSH
PRIVILEGES來執(zhí)行確認(rèn)。
下面的方法都在mysql提示符下使用忘衍,且必須有mysql的root權(quán)限:
mysql>mysql> INSERT INTO user
-> VALUES('%','monty',PASSWORD('some_pass'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> '','','','',0,0,0,0);
mysql>FLUSH PRIVILEGES
用戶權(quán)限設(shè)置
1逾苫、以root(也可用其它有權(quán)限的用戶)身份登錄
2、下面創(chuàng)建一個test用戶枚钓,密碼為test铅搓,并且只能對picture數(shù)據(jù)庫進行操作的命令
mysql>GRANT ALL ON picture.* TO test IDENTIFIED BY "test";
GRANT語句的語法看上去像這樣:
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
要使用該語句,你需要填寫下列部分:
privileges 授予用戶的權(quán)限搀捷,下表列出可用于GRANT語句的權(quán)限指定符:
權(quán)限指定符 權(quán)限允許的操作
Alter 修改表和索引
Create 創(chuàng)建數(shù)據(jù)庫和表
Delete 刪除表中已有的記錄
Drop 拋棄(刪除)數(shù)據(jù)庫和表
INDEX 創(chuàng)建或拋棄索引
Insert 向表中插入新行
REFERENCE 未用
Select 檢索表中的記錄
Update 修改現(xiàn)存表記錄
FILE 讀或?qū)懛?wù)器上的文件
PROCESS 查看服務(wù)器中執(zhí)行的線程信息或殺死線程
RELOAD 重載授權(quán)表或清空日志星掰、主機緩存或表緩存。
SHUTDOWN 關(guān)閉服務(wù)器
ALL 所有嫩舟;ALL PRIVILEGES同義詞
USAGE 特殊的“無權(quán)限”權(quán)限
上表顯示在第一組的權(quán)限指定符適用于數(shù)據(jù)庫氢烘、表和列,第二組數(shù)管理權(quán)限家厌。一般播玖,這些被相對嚴(yán)格地授權(quán),因為它們允許用戶影響服務(wù)器的操作饭于。第三組權(quán)限特殊蜀踏,ALL意味著“所有權(quán)限”,UASGE意味著無權(quán)限掰吕,即創(chuàng)建用戶果覆,但不授予權(quán)限。
columns 權(quán)限運用的列殖熟,它是可選的随静,并且你只能設(shè)置列特定的權(quán)限。如果命令有多于一個列,應(yīng)該用逗號分開它們燎猛。
what 權(quán)限運用的級別。權(quán)限可以是全局的(適用于所有數(shù)據(jù)庫和所有表)照皆、特定數(shù)據(jù)庫(適用于一個數(shù)據(jù)庫中的所有表)或特定表的重绷。可以通過指定一個columns字句是權(quán)限是列特定的膜毁。
user 權(quán)限授予的用戶昭卓,它由一個用戶名和主機名組成。在MySQL中瘟滨,你不僅指定誰能連接候醒,還有從哪里連接。這允許你讓兩個同名用戶從不同地方連接杂瘸。 MySQL讓你區(qū)分他們倒淫,并彼此獨立地賦予權(quán)限。MySQL中的一個用戶名就是你連接服務(wù)器時指定的用戶名败玉,該名字不必與你的Unix登錄名或 Windows名聯(lián)系起來敌土。缺省地,如果你不明確指定一個名字运翼,客戶程序?qū)⑹褂媚愕牡卿浢鳛镸ySQL用戶名返干。這只是一個約定。你可以在授權(quán)表中將該名 字改為nobody血淌,然后以nobody連接執(zhí)行需要超級用戶權(quán)限的操作矩欠。
password 賦予用戶的口令,它是可選的悠夯。如果你對新用戶沒有指定IDENTIFIED BY子句癌淮,該用戶不賦給口令(不安全)。對現(xiàn)有用戶疗疟,任何你指定的口令將代替老口令该默。如果你不指定口令,老口令保持不變策彤,當(dāng)你用IDENTIFIED BY時栓袖,口令字符串用改用口令的字面含義,GRANT將為你編碼口令店诗,不要你用SET PASSWORD 那樣使用password()函數(shù)裹刮。
WITH GRANT OPTION子句是可選的。如果你包含它庞瘸,用戶可以授予權(quán)限通過GRANT語句授權(quán)給其它用戶捧弃。你可以用該子句給與其它用戶授權(quán)的能力躁染。
注意:用戶名、口令歼培、數(shù)據(jù)庫和表名在授權(quán)表記錄中是大小寫敏感的弹谁,主機名和列名不是。
一般地买鸽,你可以通過詢問幾個簡單的問題來識別GRANT語句的種類:
誰能連接涧郊,從那兒連接?
用戶應(yīng)該有什么級別的權(quán)限眼五,他們適用于什么妆艘?
用戶應(yīng)該允許管理權(quán)限嗎?
下面就討論一些例子看幼。
1.1 誰能連接批旺,從那兒連接?
你可以允許一個用戶從特定的或一系列主機連接诵姜。有一個極端汽煮,如果你知道降職從一個主機連接,你可以將權(quán)限局限于單個主機:
GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby"
GRANT ALL ON samp_db.* TO fred@res.mars.com IDENTIFIED BY "quartz"
(samp_db.意思是“samp_db數(shù)據(jù)庫的所有表)另一個極端是茅诱,你可能有一個經(jīng)常旅行并需要能從世界各地的主機連接的用戶max逗物。在這種情況下,你可以允許他無論從哪里連接:
GRANT ALL ON samp_db. TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符作用瑟俭,與LIKE模式匹配的含義相同翎卓。在上述語句中,它意味著“任何主機”摆寄。所以max和max@%等價失暴。這是建立用戶最簡單的方法,但也是最不安全的微饥。其中逗扒,你可以允許一個用戶從一個受限的主機集合訪問。例如欠橘,要允許mary從snake.net域的任何主機連接矩肩,用一個%.snake.net主機指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
如果你喜歡,用戶標(biāo)識符的主機部分可以用IP地址而不是一個主機名來給定肃续。你可以指定一個IP地址或一個包含模式字符的地址黍檩,而且,從MySQL 3.23始锚,你還可以指定具有指出用于網(wǎng)絡(luò)號的位數(shù)的網(wǎng)絡(luò)掩碼的IP號:
GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby"
GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz"
GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"
第一個例子指出用戶能從其連接的特定主機刽酱,第二個指定對于C類子網(wǎng)192.168.128的IP模式,而第三條語句中瞧捌,192.168.128.0/17指定一個17位網(wǎng)絡(luò)號并匹配具有192.168.128頭17位的IP地址棵里。
1.2 用戶應(yīng)該有什么級別的權(quán)限和它們應(yīng)該適用于什么润文?
你可以授權(quán)不同級別的權(quán)限,全局權(quán)限是最強大的殿怜,因為它們適用于任何數(shù)據(jù)庫典蝌。要使ethel成為可做任何事情的超級用戶,包括能授權(quán)給其它用戶稳捆,發(fā)出下列語句:
GRANT ALL ON . TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的.意味著“所有數(shù)據(jù)庫、所有表”乔夯。從安全考慮,我們指定ethel只能從本地連接款侵。限制一個超級用戶可以連接的主機通常是明智的,因為它限制了試圖破解口令的主機妹笆。
有些權(quán)限(FILE哲鸳、PROCESS、RELOAD和SHUTDOWN)是管理權(quán)限并且只能用"ON ."全局權(quán)限指定符授權(quán)缺狠。如果你愿意,你可以授權(quán)這些權(quán)限脸秽,而不授權(quán)數(shù)據(jù)庫權(quán)限儒老。例如,下列語句設(shè)置一個flush用戶记餐,他只能發(fā)出flush語句驮樊。 這可能在你需要執(zhí)行諸如清空日志等的管理腳本中會有用:
GRANT RELOAD ON . TO flushl@localhost IDENTIFIED BY "flushpass"
一般地,你想授權(quán)管理權(quán)限,吝嗇點囚衔,因為擁有它們的用戶可以影響你的服務(wù)器的操作挖腰。
數(shù)據(jù)庫級權(quán)限適用于一個特定數(shù)據(jù)庫中的所有表,它們可通過使用ON db_name.*子句授予:
GRANT ALL ON samp_db TO bill@racer.snake.net INDETIFIED BY "rock" GRANT Select ON samp_db TO ro_user@% INDETIFIED BY "rock"
第一條語句向bill授權(quán)samp_db數(shù)據(jù)庫中所有表的權(quán)限练湿,第二條創(chuàng)建一個嚴(yán)格限制訪問的用戶ro_user(只讀用戶)猴仑,只能訪問samp_db數(shù)據(jù)
庫中的所有表,但只有讀取肥哎,即用戶只能發(fā)出Select語句辽俗。
你可以列出一系列同時授予的各個權(quán)限。例如篡诽,如果你想讓用戶能讀取并能修改現(xiàn)有數(shù)據(jù)庫的內(nèi)容崖飘,但不能創(chuàng)建新表或刪除表,如下授予這些權(quán)限:
GRANT Select,Insert,Delete,Update ON samp_db TO bill@snake.net INDETIFIED BY "rock"
對于更精致的訪問控制杈女,你可以在各個表上授權(quán)朱浴,或甚至在表的每個列上。當(dāng)你想向用戶隱藏一個表的部分時达椰,或你想讓一個用戶只能修改特定的列時翰蠢,列特定權(quán)限非常有用。如:
GRANT Select ON samp_db.member TO bill@localhost INDETIFIED BY "rock"
GRANT Update (expiration) ON samp_db. member TO bill@localhost
第一條語句授予對整個member表的讀權(quán)限并設(shè)置了一個口令啰劲,第二條語句增加了Update權(quán)限梁沧,當(dāng)只對expiration列。沒必要再指定口令呈枉,因
為第一條語句已經(jīng)指定了趁尼。
如果你想對多個列授予權(quán)限,指定一個用逗號分開的列表猖辫。例如酥泞,對assistant用戶增加member表的地址字段的Update權(quán)限,使用如下語句
啃憎,新權(quán)限將加到用戶已有的權(quán)限中:
GRANT Update (street,city,state,zip) ON samp_db TO assistant@localhost
1.3 用戶應(yīng)該被允許管理權(quán)限嗎芝囤?
你可以允許一個數(shù)據(jù)庫的擁有者通過授予數(shù)據(jù)庫上的所有擁有者權(quán)限來控制數(shù)據(jù)庫的訪問,在授權(quán)時辛萍,指定WITH GRANT OPTION悯姊。例如:如
果你想讓alicia能從big.corp.com域的任何主機連接并具有sales數(shù)據(jù)庫中所有表的管理員權(quán)限,你可以用如下 GRANT語句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION
在效果上WITH GRANT OPTION子句允許你把訪問授權(quán)的權(quán)利授予另一個用戶贩毕。要注意悯许,擁有GRANT權(quán)限的兩個用戶可以彼此授權(quán)。如果你只給予了第一個用戶Select權(quán) 限辉阶,而另一個用戶有GRANT加上Select權(quán)限先壕,那么第二個用戶可以是第一個用戶更“強大”瘩扼。
2 撤權(quán)并刪除用戶
要取消一個用戶的權(quán)限,使用REVOKE語句垃僚。REVOKE的語法非常類似于GRANT語句集绰,除了TO用FROM取代并且沒有INDETIFED BY和WITH GRANT
OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必須匹配原來GRANT語句的你想撤權(quán)的用戶的user部分。privileges部分不需匹配谆棺,你可以用GRANT語句授權(quán)栽燕,然后用REVOKE語句只撤銷部分權(quán)限。
REVOKE語句只刪除權(quán)限改淑,而不刪除用戶碍岔。即使你撤銷了所有權(quán)限,在user表中的用戶記錄依然保留朵夏,這意味著用戶仍然可以連接服務(wù)器付秕。要完全刪除一個用戶,你必須用一條Delete語句明確從user表中刪除用戶記錄:
%mysql -u root mysql
mysql>Delete FROM user Where User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;
Delete語句刪除用戶記錄侍郭,而FLUSH語句告訴服務(wù)器重載授權(quán)表。(當(dāng)你使用GRANT和REVOKE語句時掠河,表自動重載亮元,而你直接修改授權(quán)表時不是。)
MySQL 8.0 正式版 8.0.11 已發(fā)布唠摹,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍爆捞,還帶來了大量的改進和更快的性能!
注意:從 MySQL 5.7 升級到 MySQL 8.0 僅支持通過使用 in-place 方式進行升級勾拉,并且不支持從 MySQL 8.0 降級到 MySQL 5.7(或從某個 MySQL 8.0 版本降級到任意一個更早的 MySQL 8.0 版本)煮甥。唯一受支持的替代方案是在升級之前對數(shù)據(jù)進行備份。
下面簡要介紹 MySQL 8 中值得關(guān)注的新特性和改進藕赞。
- 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍成肘。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負(fù)載、IO 密集型工作負(fù)載斧蜕、以及高競爭("hot spot"熱點競爭問題)工作負(fù)載双霍。
- NoSQL:MySQL 從 5.7 版本開始提供 NoSQL 存儲功能,目前在 8.0 版本中這部分功能也得到了更大的改進批销。該項功能消除了對獨立的 NoSQL 文檔數(shù)據(jù)庫的需求洒闸,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的 ACID 合規(guī)性。
窗口函數(shù)(Window Functions):從 MySQL 8.0 開始均芽,新增了一個叫窗口函數(shù)的概念丘逸,它可以用來實現(xiàn)若干新的查詢方式。窗口函數(shù)與 SUM()掀宋、COUNT() 這種集合函數(shù)類似深纲,但它不會將多行查詢結(jié)果合并為一行仲锄,而是將結(jié)果放回多行當(dāng)中。即窗口函數(shù)不需要 GROUP BY囤萤。
隱藏索引:在 MySQL 8.0 中昼窗,索引可以被“隱藏”和“顯示”。當(dāng)對索引進行隱藏時涛舍,它不會被查詢優(yōu)化器所使用澄惊。我們可以使用這個特性用于性能調(diào)試,例如我們先隱藏一個索引富雅,然后觀察其對數(shù)據(jù)庫的影響掸驱。如果數(shù)據(jù)庫性能有所下降,說明這個索引是有用的没佑,然后將其“恢復(fù)顯示”即可毕贼;如果數(shù)據(jù)庫性能看不出變化,說明這個索引是多余的蛤奢,可以考慮刪掉鬼癣。
降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序啤贩。
通用表表達(dá)式(Common Table Expressions CTE):在復(fù)雜的查詢中使用嵌入式表時待秃,使用 CTE 使得查詢語句更清晰。
UTF-8 編碼:從 MySQL 8 開始痹屹,使用 utf8mb4 作為 MySQL 的默認(rèn)字符集章郁。
JSON:MySQL 8 大幅改進了對 JSON 的支持,添加了基于路徑查詢參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù)志衍,以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)暖庄。
可靠性:InnoDB 現(xiàn)在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現(xiàn)事務(wù)完整性楼肪,要么失敗回滾培廓,要么成功提交,不至于出現(xiàn) DDL 時部分成功的問題淹辞,此外還支持 crash-safe 特性医舆,元數(shù)據(jù)存儲在單個事務(wù)數(shù)據(jù)字典中。
高可用性(High Availability):InnoDB 集群為您的數(shù)據(jù)庫提供集成的原生 HA 解決方案象缀。
安全性:對 OpenSSL 的改進蔬将、新的默認(rèn)身份驗證、SQL 角色央星、密碼強度霞怀、授權(quán)。
詳細(xì)更新說明:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
官方發(fā)布說明:https://blogs.oracle.com/mysql/announcing-general-availability-of-mysql-80
MySQL 8 正式版的新增功能:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/
下載地址
Windows (x86, 64-bit), ZIP Archive(mysql-8.0.11-winx64.zip) 183.3M
https://dev.mysql.com/downloads/file/?id=476233
Windows (x86, 64-bit), ZIP Archive(mysql-8.0.11-winx64-debug-test.zip) 230.5M
Debug Binaries & Test Suite
https://dev.mysql.com/downloads/file/?id=476234
其他版本下載地址 >>> https://dev.mysql.com/downloads/mysql/8.0.html