mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
WL#1054: Pluggable authentication support
Merged the implementation to a new base tree.
This commit is contained in:
212
mysql-test/r/plugin_auth.result
Normal file
212
mysql-test/r/plugin_auth.result
Normal file
@ -0,0 +1,212 @@
|
||||
SELECT PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_DESCRIPTION
|
||||
FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME='test_plugin_server';
|
||||
PLUGIN_STATUS ACTIVE
|
||||
PLUGIN_TYPE AUTHENTICATION
|
||||
PLUGIN_DESCRIPTION plugin API test plugin
|
||||
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||
SELECT plugin,authentication_string FROM mysql.user WHERE User='plug';
|
||||
plugin authentication_string
|
||||
test_plugin_server plug_dest
|
||||
## test plugin auth
|
||||
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
|
||||
GRANT PROXY ON plug_dest TO plug;
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
plug@localhost plug_dest@%
|
||||
## test SET PASSWORD
|
||||
SET PASSWORD = PASSWORD('plug_dest');
|
||||
Warnings:
|
||||
Note 1698 SET PASSWORD has no significance for users authenticating via plugins
|
||||
## test bad credentials
|
||||
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
|
||||
## test bad default plugin : should get CR_AUTH_PLUGIN_CANNOT_LOAD
|
||||
## test correct default plugin
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
plug@localhost plug@%
|
||||
## test no_auto_create_user sql mode with plugin users
|
||||
SET @@sql_mode=no_auto_create_user;
|
||||
GRANT INSERT ON TEST.* TO grant_user IDENTIFIED WITH 'test_plugin_server';
|
||||
SET @@sql_mode=default;
|
||||
DROP USER grant_user;
|
||||
## test utf-8 user name
|
||||
CREATE USER `Ÿ` IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
GRANT PROXY ON plug_dest TO `Ÿ`;
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
Ÿ@localhost plug_dest@%
|
||||
DROP USER `Ÿ`;
|
||||
## test GRANT ... IDENTIFIED WITH/BY ...
|
||||
CREATE DATABASE test_grant_db;
|
||||
# create new user via GRANT WITH
|
||||
GRANT ALL PRIVILEGES ON test_grant_db.* TO new_grant_user
|
||||
IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
GRANT PROXY ON plug_dest TO new_grant_user;
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
new_grant_user@localhost plug_dest@%
|
||||
USE test_grant_db;
|
||||
CREATE TABLE t1 (a INT);
|
||||
DROP TABLE t1;
|
||||
REVOKE ALL PRIVILEGES ON test_grant_db.* FROM new_grant_user;
|
||||
# try re-create existing user via GRANT IDENTIFIED BY
|
||||
GRANT ALL PRIVILEGES ON test_grant_db.* TO new_grant_user
|
||||
IDENTIFIED BY 'unused_password';
|
||||
# make sure password doesn't take precendence
|
||||
ERROR 28000: Access denied for user 'new_grant_user'@'localhost' (using password: YES)
|
||||
#make sure plugin auth still available
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
new_grant_user@localhost plug_dest@%
|
||||
USE test_grant_db;
|
||||
CREATE TABLE t1 (a INT);
|
||||
DROP TABLE t1;
|
||||
DROP USER new_grant_user;
|
||||
# try re-create existing user via GRANT IDENTIFIED WITH
|
||||
GRANT ALL PRIVILEGES ON test_grant_db.* TO plug
|
||||
IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
ERROR HY000: GRANT with IDENTIFIED WITH is illegal because the user plug already exists
|
||||
GRANT ALL PRIVILEGES ON test_grant_db.* TO plug_dest
|
||||
IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
ERROR HY000: GRANT with IDENTIFIED WITH is illegal because the user plug_dest already exists
|
||||
REVOKE SELECT on test_grant_db.* FROM joro
|
||||
INDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
ERROR 42000: 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 'INDENTIFIED WITH 'test_plugin_server' AS 'plug_dest'' at line 2
|
||||
REVOKE SELECT on test_grant_db.* FROM joro
|
||||
INDENTIFIED BY 'plug_dest_passwd';
|
||||
ERROR 42000: 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 'INDENTIFIED BY 'plug_dest_passwd'' at line 2
|
||||
REVOKE SELECT on test_grant_db.* FROM joro
|
||||
INDENTIFIED BY PASSWORD 'plug_dest_passwd';
|
||||
ERROR 42000: 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 'INDENTIFIED BY PASSWORD 'plug_dest_passwd'' at line 2
|
||||
DROP DATABASE test_grant_db;
|
||||
## GRANT PROXY tests
|
||||
CREATE USER grant_plug IDENTIFIED WITH 'test_plugin_server'
|
||||
AS 'grant_plug_dest';
|
||||
CREATE USER grant_plug_dest IDENTIFIED BY 'grant_plug_dest_passwd';
|
||||
CREATE USER grant_plug_dest2 IDENTIFIED BY 'grant_plug_dest_passwd2';
|
||||
# ALL PRIVILEGES doesn't include PROXY
|
||||
GRANT ALL PRIVILEGES ON *.* TO grant_plug;
|
||||
ERROR 28000: Access denied for user 'grant_plug'@'localhost' (using password: YES)
|
||||
GRANT ALL PRIVILEGES,PROXY ON grant_plug_dest TO grant_plug;
|
||||
ERROR 42000: 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 'PROXY ON grant_plug_dest TO grant_plug' at line 1
|
||||
this should fail : can't combine PROXY
|
||||
GRANT ALL SELECT,PROXY ON grant_plug_dest TO grant_plug;
|
||||
ERROR 42000: 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 'SELECT,PROXY ON grant_plug_dest TO grant_plug' at line 1
|
||||
# this should fail : no such grant
|
||||
REVOKE PROXY ON grant_plug_dest FROM grant_plug;
|
||||
ERROR 42000: There is no such grant defined for user 'grant_plug' on host '%'
|
||||
in grant_plug_dest_con
|
||||
## testing what an ordinary user can grant
|
||||
this should fail : no rights to grant all
|
||||
GRANT PROXY ON ''@'' TO grant_plug;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : not the same user
|
||||
GRANT PROXY ON grant_plug TO grant_plug_dest;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : same user, but on a different host
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should work : same user
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug_dest2;
|
||||
this should work : same user
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug WITH GRANT OPTION;
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug;
|
||||
this should fail : can't create users
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug@localhost;
|
||||
ERROR 42000: You are not allowed to create a user with GRANT
|
||||
in default connection
|
||||
# test what root can grant
|
||||
should work : root has PROXY to all users
|
||||
GRANT PROXY ON ''@'' TO grant_plug;
|
||||
REVOKE PROXY ON ''@'' FROM grant_plug;
|
||||
should work : root has PROXY to all users
|
||||
GRANT PROXY ON ''@'' TO proxy_admin IDENTIFIED BY 'test'
|
||||
WITH GRANT OPTION;
|
||||
need USAGE : PROXY doesn't contain it.
|
||||
GRANT USAGE on *.* TO proxy_admin;
|
||||
in proxy_admin_con;
|
||||
should work : proxy_admin has proxy to ''@''
|
||||
GRANT PROXY ON future_user TO grant_plug;
|
||||
in default connection
|
||||
SHOW GRANTS FOR grant_plug;
|
||||
Grants for grant_plug@%
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' WITH GRANT OPTION
|
||||
GRANT PROXY ON 'future_user'@'%' TO 'grant_plug'@'%'
|
||||
REVOKE PROXY ON future_user FROM grant_plug;
|
||||
SHOW GRANTS FOR grant_plug;
|
||||
Grants for grant_plug@%
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' WITH GRANT OPTION
|
||||
## testing drop user
|
||||
CREATE USER test_drop@localhost;
|
||||
GRANT PROXY ON future_user TO test_drop@localhost;
|
||||
SHOW GRANTS FOR test_drop@localhost;
|
||||
Grants for test_drop@localhost
|
||||
GRANT USAGE ON *.* TO 'test_drop'@'localhost'
|
||||
GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost'
|
||||
DROP USER test_drop@localhost;
|
||||
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost';
|
||||
Host User Proxied_Host Proxied_User With_Grant
|
||||
DROP USER proxy_admin;
|
||||
DROP USER grant_plug,grant_plug_dest,grant_plug_dest2;
|
||||
## END GRANT PROXY tests
|
||||
## cleanup
|
||||
DROP USER plug;
|
||||
DROP USER plug_dest;
|
||||
## @@proxy_user tests
|
||||
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||
GRANT PROXY ON plug_dest TO plug;
|
||||
SELECT USER(),CURRENT_USER(),@@LOCAL.proxy_user;
|
||||
USER() CURRENT_USER() @@LOCAL.proxy_user
|
||||
root@localhost root@localhost NULL
|
||||
SELECT @@GLOBAL.proxy_user;
|
||||
ERROR HY000: Variable 'proxy_user' is a SESSION variable
|
||||
SELECT @@LOCAL.proxy_user;
|
||||
@@LOCAL.proxy_user
|
||||
NULL
|
||||
SET GLOBAL proxy_user = 'test';
|
||||
ERROR HY000: Variable 'proxy_user' is a read only variable
|
||||
SET LOCAL proxy_user = 'test';
|
||||
ERROR HY000: Variable 'proxy_user' is a read only variable
|
||||
SELECT @@LOCAL.proxy_user;
|
||||
@@LOCAL.proxy_user
|
||||
NULL
|
||||
# in connection plug_con
|
||||
SELECT @@LOCAL.proxy_user;
|
||||
@@LOCAL.proxy_user
|
||||
'plug'@'%'
|
||||
# in connection default
|
||||
## cleanup
|
||||
DROP USER plug;
|
||||
DROP USER plug_dest;
|
||||
## END @@proxy_user tests
|
||||
## @@external_user tests
|
||||
CREATE USER plug IDENTIFIED WITH 'test_plugin_server' AS 'plug_dest';
|
||||
CREATE USER plug_dest IDENTIFIED BY 'plug_dest_passwd';
|
||||
GRANT PROXY ON plug_dest TO plug;
|
||||
SELECT USER(),CURRENT_USER(),@@LOCAL.external_user;
|
||||
USER() CURRENT_USER() @@LOCAL.external_user
|
||||
root@localhost root@localhost NULL
|
||||
SELECT @@GLOBAL.external_user;
|
||||
ERROR HY000: Variable 'external_user' is a SESSION variable
|
||||
SELECT @@LOCAL.external_user;
|
||||
@@LOCAL.external_user
|
||||
NULL
|
||||
SET GLOBAL external_user = 'test';
|
||||
ERROR HY000: Variable 'external_user' is a read only variable
|
||||
SET LOCAL external_user = 'test';
|
||||
ERROR HY000: Variable 'external_user' is a read only variable
|
||||
SELECT @@LOCAL.external_user;
|
||||
@@LOCAL.external_user
|
||||
NULL
|
||||
# in connection plug_con
|
||||
SELECT @@LOCAL.external_user;
|
||||
@@LOCAL.external_user
|
||||
'plug'@'%'
|
||||
# in connection default
|
||||
## cleanup
|
||||
DROP USER plug;
|
||||
DROP USER plug_dest;
|
||||
## END @@external_user tests
|
Reference in New Issue
Block a user