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文件目錄等).
用戶名密碼: 這一步才是關鍵!!! 記得加上 --console 參數!
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>
在執行SQL腳本之前,會讓你先改密碼:
mysql>
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
登陸后執行下面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數據庫了.
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、配置文件
配置文件默認是安裝目錄下的 my.ini 文件(或my-default.ini),沒有需要自己創建。
[mysqld]
# 設置3306端口
port=3306 # 設置mysql的安裝目錄
basedir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\
# 設置mysql數據庫的數據的存放目錄
datadir=F:\software\eclipse J2EE\mysql-8.0.11-winx64\data
# 允許最大連接數
max_connections=200 # 允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統
max_connect_errors=10 # 服務端使用的字符集默認為UTF8
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集 default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8</pre>
注意,里面的 basedir 是我本地的安裝目錄,datadir 是我數據庫數據文件要存放的位置,各項配置需要根據自己的環境進行配置。
3、初始化數據庫
在MySQL安裝目錄的 bin 目錄下執行命令:
mysqld --initialize --console
執行完成后,會打印 root 用戶的初始默認密碼,在執行輸出結果里面有一段:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E 其中root@localhost:
后面的“rI5rvf5x5G,E”就是初始密碼(不含首位空格)。在沒有更改密碼前,需要記住這個密碼,后續登錄需要用到。
要是你手賤,關快了,或者沒記住,那也沒事,刪掉初始化的 datadir 目錄,再執行一遍初始化命令,又會重新生成的。
4、安裝服務
在MySQL安裝目錄的bin目錄下按shift+右鍵執行“在此處打開命令行窗口”
執行mysqld --install和net start mysql安裝并啟動mysql,如果關閉執行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+右鍵執行“在此處打開命令行窗口”
執行mysql -u root -p,輸入密碼。
6、修改密碼
登陸后執行下面命令。
ALTER USER ``'root'``@``'localhost'
IDENTIFIED WITH mysql_native_password BY ``'新密碼'``;
7、配置環境變量
雖然MySQL安裝成功,但是每次都切換到:\mysql-5.7.17-winx64下來執行相關操作是很麻煩的,配置環境變量后就可方便的操作MySQL了。右鍵‘計算機’->‘屬性’->‘高級系統設置’->‘環境變量’,在系統變量下找到path,點擊編輯按鈕進入編輯path對話框,在變量值里面前面加上MySQL的解壓路徑下的bin目錄,我的是F:\software\eclipse J2EE\mysql-8.0.11-winx64\bin,注意后面要加上英文分號,確定即配置好環境變量。
參考: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服務
在Windows中是這個界面:
WIN+R快捷鍵打開運行命令,并輸入services.msc,按回車Enter即可進入.
輸入命令 mysqld install
提示:Service successfully installed.
安裝以后啟動mysql服務
輸入命令 net start mysql
5.7以上的版本可能會無法啟動,報錯:服務沒有報告任何錯誤。
輸入命令 mysqld --initialize
正常情況下無任何提示,自動空格一行,即代表初始化成功。
再重新啟動服務就可以開起來,原因是5.7安裝文件夾里面缺少data文件夾,initialize以后會自動生成這個文件夾及其中文件。
命令行設置用戶名密碼
錯誤提示:
# 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)'
現在終于找到解決方法了。本來準備重裝的,現在不必了。
方法操作很簡單,如下:
# /etc/init.d/mysqld stop //停止mysql服務的運行
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & //跳過受權表訪問
# 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: <輸入新設的密碼newpassword>
附:Mac上解決Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
首先安裝完mysql之后,在系統偏好設置里面會有mysql設置,進去后可點擊啟動mysql server和關閉。
出現問題的原因是mysql root用戶的密碼問題,我在網上找了好多種方法,最后這種方法可行,就記錄下來了,具體步驟看下面。
解決步驟:
1、首先在設置中關閉mysql服務;
2、然后打開終端,輸入:sudo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
再輸入:sudo mysql -u root mysql
進入mysql>
執行以下命令:update user set password_expired = "Y" where user="root";
再輸入:flush privileges;這一步很重要
然后:quit
3、進行登陸
輸入:mysql -uroot -p
會提示你輸入密碼,這個密碼就是安裝mysql時出現的
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默認給分配了一個默認密碼,但當自己在終端上使用默認密碼登錄的時候,總會提示一個授權失敗的錯誤:Access denied for user ‘root’@’localhost’ (using passwor)如圖:
解決方案
既然現在沒法登錄到數據庫中,改密碼和添加用戶等操作也無從談起。好在MySQL中還提供了一種免去密碼校驗進入數據庫的方法,我們就先使用這種方法登入到數據庫中。然后將默認密碼替換掉,上面的問題就可以解決掉啦~具體操作如下(如果想要快速解決,可以直接看最下面的快速方案)
一、找到Mysql配置文件
這個操作,在不同平臺下對應的不同的操作文件
mac系統中配置文件是mysql安裝目錄support_file下的my-default文件
需要注意的是:默認該配置文件不具備寫權限需要使用chmod命令先為該文件添加寫權限才能進行更改
ps:windows系統的配置文件是mysql安裝根目錄的my.ini文件
二、修改配置文件
打開剛才我們找到的配置文件,然后在里面找到 [mysqld]
這一項,然后在該配置項下添加 skip-grant-tables
這個配置,然后保存文件。
三、重啟mysql服務
為了使上一步的配置項生效,我們需要重啟MySQL的服務
Mac系統可以在系統偏好中進行重啟:
windows系統可以通過:在我的電腦上右鍵–>服務–>找到mysql服務進行重啟
linux系統可以使用:service mysqld restart來重啟
四、免密登錄MySQL
然后再次進入到終端當中,敲入 mysql -u root -p
命令然后回車,當需要輸入密碼時,直接按enter鍵,便可以不用密碼登錄到數據庫當中
五、修改默認的密碼
使用 set password for 'username'@'host' = password('newpassword')
命令修改新的密碼。
六、檢驗成果
我們改完默認密碼后,再次進入到之前的配置文件中,將我們跳過密碼的那個配置行給刪除掉,變為系統原先的配置。重啟MySQL服務,下次再登錄的時候便可以解決掉這個問題了。
快速方案
要是你覺得上面的操作過于麻煩,可以使用下面的快捷方式達到上面的效果,針對mac系統為例:
首先進入到 /usr/local/mysql/support-file
這個目錄下,然后按照圖片上的步驟進行操作
進入mysql的安全模式后,鍵入圖中圈起來的四行配置(必須逐行輸入),輸入完成后使用 contrl+z
鍵結束輸入
然后再終端中使用 mysql -u root -p 同樣可以實現密碼登錄,另外此時密碼也已經修改為了 pass
,下次的登錄即可使用pass這個新密碼了。與上面的操作達成的效果是相同的。
忘記密碼了怎么辦 或者說 想把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”
執行這個命令后,需要輸入root的原密碼,這樣root的密碼將改為newpasswd。同樣,把命令里的root改為你的用戶名,你就可以改你自己的密碼了。
當然如果你的mysqladmin連接不上mysql server,或者你沒有辦法執行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環境中
mysql>select * from mysql.user ;
新增賬戶:
GRANT ALL PRIVILEGES ON . TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
monty對應帳號 some_pass對應密碼
增加一個用戶,用戶名為sa,密碼為123。注意要使用PASSWORD函數,然后還要使用FLUSH
PRIVILEGES來執行確認。
下面的方法都在mysql提示符下使用,且必須有mysql的root權限:
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
用戶權限設置
1、以root(也可用其它有權限的用戶)身份登錄
2、下面創建一個test用戶,密碼為test,并且只能對picture數據庫進行操作的命令
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 授予用戶的權限,下表列出可用于GRANT語句的權限指定符:
權限指定符 權限允許的操作
Alter 修改表和索引
Create 創建數據庫和表
Delete 刪除表中已有的記錄
Drop 拋棄(刪除)數據庫和表
INDEX 創建或拋棄索引
Insert 向表中插入新行
REFERENCE 未用
Select 檢索表中的記錄
Update 修改現存表記錄
FILE 讀或寫服務器上的文件
PROCESS 查看服務器中執行的線程信息或殺死線程
RELOAD 重載授權表或清空日志、主機緩存或表緩存。
SHUTDOWN 關閉服務器
ALL 所有;ALL PRIVILEGES同義詞
USAGE 特殊的“無權限”權限
上表顯示在第一組的權限指定符適用于數據庫、表和列,第二組數管理權限。一般,這些被相對嚴格地授權,因為它們允許用戶影響服務器的操作。第三組權限特殊,ALL意味著“所有權限”,UASGE意味著無權限,即創建用戶,但不授予權限。
columns 權限運用的列,它是可選的,并且你只能設置列特定的權限。如果命令有多于一個列,應該用逗號分開它們。
what 權限運用的級別。權限可以是全局的(適用于所有數據庫和所有表)、特定數據庫(適用于一個數據庫中的所有表)或特定表的。可以通過指定一個columns字句是權限是列特定的。
user 權限授予的用戶,它由一個用戶名和主機名組成。在MySQL中,你不僅指定誰能連接,還有從哪里連接。這允許你讓兩個同名用戶從不同地方連接。 MySQL讓你區分他們,并彼此獨立地賦予權限。MySQL中的一個用戶名就是你連接服務器時指定的用戶名,該名字不必與你的Unix登錄名或 Windows名聯系起來。缺省地,如果你不明確指定一個名字,客戶程序將使用你的登錄名作為MySQL用戶名。這只是一個約定。你可以在授權表中將該名 字改為nobody,然后以nobody連接執行需要超級用戶權限的操作。
password 賦予用戶的口令,它是可選的。如果你對新用戶沒有指定IDENTIFIED BY子句,該用戶不賦給口令(不安全)。對現有用戶,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當你用IDENTIFIED BY時,口令字符串用改用口令的字面含義,GRANT將為你編碼口令,不要你用SET PASSWORD 那樣使用password()函數。
WITH GRANT OPTION子句是可選的。如果你包含它,用戶可以授予權限通過GRANT語句授權給其它用戶。你可以用該子句給與其它用戶授權的能力。
注意:用戶名、口令、數據庫和表名在授權表記錄中是大小寫敏感的,主機名和列名不是。
一般地,你可以通過詢問幾個簡單的問題來識別GRANT語句的種類:
誰能連接,從那兒連接?
用戶應該有什么級別的權限,他們適用于什么?
用戶應該允許管理權限嗎?
下面就討論一些例子。
1.1 誰能連接,從那兒連接?
你可以允許一個用戶從特定的或一系列主機連接。有一個極端,如果你知道降職從一個主機連接,你可以將權限局限于單個主機:
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數據庫的所有表)另一個極端是,你可能有一個經常旅行并需要能從世界各地的主機連接的用戶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";
如果你喜歡,用戶標識符的主機部分可以用IP地址而不是一個主機名來給定。你可以指定一個IP地址或一個包含模式字符的地址,而且,從MySQL 3.23,你還可以指定具有指出用于網絡號的位數的網絡掩碼的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類子網192.168.128的IP模式,而第三條語句中,192.168.128.0/17指定一個17位網絡號并匹配具有192.168.128頭17位的IP地址。
1.2 用戶應該有什么級別的權限和它們應該適用于什么?
你可以授權不同級別的權限,全局權限是最強大的,因為它們適用于任何數據庫。要使ethel成為可做任何事情的超級用戶,包括能授權給其它用戶,發出下列語句:
GRANT ALL ON . TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的.意味著“所有數據庫、所有表”。從安全考慮,我們指定ethel只能從本地連接。限制一個超級用戶可以連接的主機通常是明智的,因為它限制了試圖破解口令的主機。
有些權限(FILE、PROCESS、RELOAD和SHUTDOWN)是管理權限并且只能用"ON ."全局權限指定符授權。如果你愿意,你可以授權這些權限,而不授權數據庫權限。例如,下列語句設置一個flush用戶,他只能發出flush語句。 這可能在你需要執行諸如清空日志等的管理腳本中會有用:
GRANT RELOAD ON . TO flushl@localhost IDENTIFIED BY "flushpass"
一般地,你想授權管理權限,吝嗇點,因為擁有它們的用戶可以影響你的服務器的操作。
數據庫級權限適用于一個特定數據庫中的所有表,它們可通過使用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授權samp_db數據庫中所有表的權限,第二條創建一個嚴格限制訪問的用戶ro_user(只讀用戶),只能訪問samp_db數據
庫中的所有表,但只有讀取,即用戶只能發出Select語句。
你可以列出一系列同時授予的各個權限。例如,如果你想讓用戶能讀取并能修改現有數據庫的內容,但不能創建新表或刪除表,如下授予這些權限:
GRANT Select,Insert,Delete,Update ON samp_db TO bill@snake.net INDETIFIED BY "rock"
對于更精致的訪問控制,你可以在各個表上授權,或甚至在表的每個列上。當你想向用戶隱藏一個表的部分時,或你想讓一個用戶只能修改特定的列時,列特定權限非常有用。如:
GRANT Select ON samp_db.member TO bill@localhost INDETIFIED BY "rock"
GRANT Update (expiration) ON samp_db. member TO bill@localhost
第一條語句授予對整個member表的讀權限并設置了一個口令,第二條語句增加了Update權限,當只對expiration列。沒必要再指定口令,因
為第一條語句已經指定了。
如果你想對多個列授予權限,指定一個用逗號分開的列表。例如,對assistant用戶增加member表的地址字段的Update權限,使用如下語句
,新權限將加到用戶已有的權限中:
GRANT Update (street,city,state,zip) ON samp_db TO assistant@localhost
1.3 用戶應該被允許管理權限嗎?
你可以允許一個數據庫的擁有者通過授予數據庫上的所有擁有者權限來控制數據庫的訪問,在授權時,指定WITH GRANT OPTION。例如:如
果你想讓alicia能從big.corp.com域的任何主機連接并具有sales數據庫中所有表的管理員權限,你可以用如下 GRANT語句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION
在效果上WITH GRANT OPTION子句允許你把訪問授權的權利授予另一個用戶。要注意,擁有GRANT權限的兩個用戶可以彼此授權。如果你只給予了第一個用戶Select權 限,而另一個用戶有GRANT加上Select權限,那么第二個用戶可以是第一個用戶更“強大”。
2 撤權并刪除用戶
要取消一個用戶的權限,使用REVOKE語句。REVOKE的語法非常類似于GRANT語句,除了TO用FROM取代并且沒有INDETIFED BY和WITH GRANT
OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必須匹配原來GRANT語句的你想撤權的用戶的user部分。privileges部分不需匹配,你可以用GRANT語句授權,然后用REVOKE語句只撤銷部分權限。
REVOKE語句只刪除權限,而不刪除用戶。即使你撤銷了所有權限,在user表中的用戶記錄依然保留,這意味著用戶仍然可以連接服務器。要完全刪除一個用戶,你必須用一條Delete語句明確從user表中刪除用戶記錄:
%mysql -u root mysql
mysql>Delete FROM user Where User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;
Delete語句刪除用戶記錄,而FLUSH語句告訴服務器重載授權表。(當你使用GRANT和REVOKE語句時,表自動重載,而你直接修改授權表時不是。)
MySQL 8.0 正式版 8.0.11 已發布,官方表示 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 版本)。唯一受支持的替代方案是在升級之前對數據進行備份。
下面簡要介紹 MySQL 8 中值得關注的新特性和改進。
- 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負載、IO 密集型工作負載、以及高競爭("hot spot"熱點競爭問題)工作負載。
- NoSQL:MySQL 從 5.7 版本開始提供 NoSQL 存儲功能,目前在 8.0 版本中這部分功能也得到了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數據庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的 ACID 合規性。
窗口函數(Window Functions):從 MySQL 8.0 開始,新增了一個叫窗口函數的概念,它可以用來實現若干新的查詢方式。窗口函數與 SUM()、COUNT() 這種集合函數類似,但它不會將多行查詢結果合并為一行,而是將結果放回多行當中。即窗口函數不需要 GROUP BY。
隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當對索引進行隱藏時,它不會被查詢優化器所使用。我們可以使用這個特性用于性能調試,例如我們先隱藏一個索引,然后觀察其對數據庫的影響。如果數據庫性能有所下降,說明這個索引是有用的,然后將其“恢復顯示”即可;如果數據庫性能看不出變化,說明這個索引是多余的,可以考慮刪掉。
降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
通用表表達式(Common Table Expressions CTE):在復雜的查詢中使用嵌入式表時,使用 CTE 使得查詢語句更清晰。
UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認字符集。
JSON:MySQL 8 大幅改進了對 JSON 的支持,添加了基于路徑查詢參數從 JSON 字段中抽取數據的 JSON_EXTRACT() 函數,以及用于將數據分別組合到 JSON 數組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數。
可靠性:InnoDB 現在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現事務完整性,要么失敗回滾,要么成功提交,不至于出現 DDL 時部分成功的問題,此外還支持 crash-safe 特性,元數據存儲在單個事務數據字典中。
高可用性(High Availability):InnoDB 集群為您的數據庫提供集成的原生 HA 解決方案。
安全性:對 OpenSSL 的改進、新的默認身份驗證、SQL 角色、密碼強度、授權。
詳細更新說明:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
官方發布說明: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