MySQL 8.4 版本注意事項
MySQL 角色名稱是指角色,這些角色是具名的權限集合。如需角色使用範例,請參閱第 8.2.10 節,「使用角色」。
角色名稱具有與帳戶名稱類似的語法和語意;請參閱第 8.2.4 節,「指定帳戶名稱」。如授權表中儲存的角色名稱,它們具有與帳戶名稱相同的屬性,這些屬性在授權表範圍資料行屬性中描述。
角色名稱在以下方面與帳戶名稱不同
角色名稱的使用者部分不能為空白。因此,沒有類似於「匿名使用者」概念的「匿名角色」。
至於帳戶名稱,省略角色名稱的主機部分會導致主機部分為
'%'
。但與帳戶名稱中的'%'
不同,角色名稱中的'%'
主機部分沒有萬用字元屬性。例如,對於用作角色名稱的名稱'me'@'%'
,主機部分 ('%'
) 僅是一個文字值;它沒有「任何主機」的相符屬性。角色名稱主機部分中的網路遮罩表示法沒有意義。
在多個情況下,允許帳戶名稱為
CURRENT_USER()
。角色名稱則否。
系統表 mysql.user
中的一列可以同時作為帳戶和角色。在此情況下,當名稱用作角色名稱時,任何特殊使用者或主機名稱比對屬性都不適用。例如,您無法執行以下陳述式,並期望它使用使用者部分為 myrole
和任何主機名稱的所有角色來設定目前工作階段角色
SET ROLE 'myrole'@'%';
相反地,此陳述式會將工作階段的啟用角色設定為名稱精確為 'myrole'@'%'
的角色。
因此,角色名稱通常只指定使用者名稱部分,並讓主機名稱部分隱含為 '%'
。如果您的目的是建立一個既可作為角色,又可作為允許從指定主機連線的使用者帳戶的名稱,則指定具有非 '%'
主機部分的角色可能很有用。