Changeset: 937553ad78c9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=937553ad78c9 Removed Files: sql/test/Users/Tests/grantMonetdb.stable.err sql/test/Users/Tests/grantMonetdb.stable.out sql/test/Users/Tests/withGrantOption.stable.err sql/test/Users/Tests/withGrantOption.stable.out Modified Files: sql/test/Users/Tests/All sql/test/Users/Tests/grantMonetdb.SQL.py sql/test/Users/Tests/withGrantOption.SQL.py Branch: default Log Message:
clean up diffs (truncated from 370 to 300 lines): diff --git a/sql/test/Users/Tests/All b/sql/test/Users/Tests/All --- a/sql/test/Users/Tests/All +++ b/sql/test/Users/Tests/All @@ -3,13 +3,13 @@ role table table_privs unknown_user +withGrantOption +grantMonetdb createSetUp -withGrantOption columnRights changePasswordUser renameUser changeSchemaUser -grantMonetdb copyinto schemaRights metadataConsistency diff --git a/sql/test/Users/Tests/grantMonetdb.SQL.py b/sql/test/Users/Tests/grantMonetdb.SQL.py --- a/sql/test/Users/Tests/grantMonetdb.SQL.py +++ b/sql/test/Users/Tests/grantMonetdb.SQL.py @@ -1,42 +1,59 @@ ### -# Grant monetdb rights to a user. -# Verify that the user can assume the monetdb role and CREATE new users, GRANT privileges and roles. +# Grant sysadmin rights to a user. +# Verify that the user can assume the sysadmin role and CREATE new users, GRANT privileges and roles. ### from MonetDBtesting.sqltest import SQLTestCase -with SQLTestCase() as tc: - tc.connect(username="monetdb", password="monetdb") - tc.execute("GRANT sysadmin TO alice;").assertSucceeded() - tc.connect(username="alice", password="alice") - tc.execute(""" - SET ROLE sysadmin; - CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library;""").assertFailed(err_code='M0M27') - tc.execute("GRANT ALL ON orders TO april;").assertSucceeded() - tc.execute("GRANT sysadmin TO april;").assertFailed(err_code='0P000') +with SQLTestCase() as mdb: + mdb.connect(username="monetdb", password="monetdb") -# import os, sys -# try: -# from MonetDBtesting import process -# except ImportError: -# import process + mdb.execute("CREATE SCHEMA library;").assertSucceeded() -# def sql_test_client(user, passwd, input): -# with process.client(lang="sql", user=user, passwd=passwd, communicate=True, -# stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE, -# input=input, port=int(os.getenv("MAPIPORT"))) as c: -# c.communicate() - -# sql_test_client('monetdb', 'monetdb', input="""\ -# GRANT sysadmin TO alice; -# """) + mdb.execute("CREATE USER alice WITH PASSWORD 'alice' name 'alice' schema library;").assertSucceeded() + mdb.execute("CREATE USER april WITH PASSWORD 'april' name 'april' schema library;").assertSucceeded() -# sql_test_client('alice', 'alice', input="""\ -# SET ROLE sysadmin; -# CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library; -# GRANT ALL ON orders TO april; -# GRANT sysadmin TO april; -# """) + mdb.execute("CREATE TABLE library.orders(price int, name VARCHAR(100));").assertSucceeded() + + with SQLTestCase() as tc: + tc.connect(username="alice", password="alice") + # alice is not a sysadmin yet + tc.execute("SET ROLE sysadmin;").assertFailed(err_code='42000', err_message="Role (sysadmin) missing") + tc.execute("CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library;").assertFailed(err_code='42M31', err_message="Insufficient privileges to create user 'may'") + tc.execute("GRANT ALL ON library.orders TO april;").assertFailed(err_code='01007', err_message="GRANT: Grantor 'alice' is not allowed to grant privileges for table 'orders'") + # give alice sysadmin rights + mdb.execute("GRANT sysadmin TO alice;").assertSucceeded() + tc.execute("SET ROLE sysadmin;").assertSucceeded() + # FIXME: this query should probably not fail + tc.execute("CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library;").assertFailed(err_code='M0M27', err_message="CREATE USER: access denied for user 'alice'") + + with SQLTestCase() as tc2: + # check that april can only SEL/INS/UPD/DEL the table after the GRANT ALL + tc2.connect(username="april", password="april") + tc2.execute("INSERT INTO library.orders VALUES (12, 'abc'), (42, 'def');").assertFailed(err_code='42000', err_message="INSERT INTO: insufficient privileges for user 'april' to insert into table 'orders'") + tc2.execute("UPDATE library.orders SET price = price*2 WHERE price < 42;").assertFailed(err_code='42000', err_message="UPDATE: insufficient privileges for user 'april' to update table 'orders'") + tc2.execute("DELETE FROM library.orders WHERE price = 42;").assertFailed(err_code='42000', err_message="DELETE FROM: insufficient privileges for user 'april' to delete from table 'orders'") + tc2.execute("SELECT * FROM library.orders;").assertFailed(err_code='42000', err_message="SELECT: access denied for april to table 'library.orders'") + tc.execute("GRANT ALL ON library.orders TO april;").assertSucceeded() + tc2.execute("INSERT INTO library.orders VALUES (12, 'abc'), (42, 'def');").assertRowCount(2) + tc2.execute("UPDATE library.orders SET price = price*2 WHERE price < 42;").assertRowCount(1) + tc2.execute("DELETE FROM library.orders WHERE price = 42;").assertRowCount(1) + tc2.execute("SELECT * FROM library.orders;").assertSucceeded().assertDataResultMatch([(24, 'abc')]) + tc2.execute("DROP TABLE library.orders;").assertFailed(err_code='42000', err_message="DROP TABLE: access denied for april to schema 'library'") + + # alice can only GRANT the role to another user if the role was granted + # to alice WITH ADMIN OPTION + tc.execute("GRANT sysadmin TO april;").assertFailed(err_code='0P000', err_message="GRANT: Insufficient privileges to grant ROLE 'sysadmin'") + mdb.execute("REVOKE sysadmin FROM alice;").assertSucceeded() + mdb.execute("GRANT sysadmin TO alice WITH ADMIN OPTION;").assertSucceeded() + tc.execute("GRANT sysadmin TO april;").assertSucceeded() + + # clean up + mdb.execute("DROP TABLE library.orders;").assertSucceeded() + mdb.execute("DROP SCHEMA library;").assertSucceeded() + mdb.execute("DROP USER alice;").assertSucceeded() + mdb.execute("DROP USER april;").assertSucceeded() + diff --git a/sql/test/Users/Tests/grantMonetdb.stable.err b/sql/test/Users/Tests/grantMonetdb.stable.err deleted file mode 100644 --- a/sql/test/Users/Tests/grantMonetdb.stable.err +++ /dev/null @@ -1,45 +0,0 @@ -stderr of test 'grantMonetdb` in directory 'sql/test/Users` itself: - - -# 10:44:50 > -# 10:44:50 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32584" "--set" "mapi_usock=/var/tmp/mtest-30723/.s.monetdb.32584" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" -# 10:44:50 > - -# builtin opt gdk_dbpath = /home/vera/Desktop/MonetDB/BUILD/var/monetdb5/dbfarm/demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# builtin opt monet_prompt = > -# builtin opt monet_daemon = no -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_autosense = false -# builtin opt sql_optimizer = default_pipe -# builtin opt sql_debug = 0 -# cmdline opt gdk_nr_threads = 0 -# cmdline opt mapi_open = true -# cmdline opt mapi_port = 32584 -# cmdline opt mapi_usock = /var/tmp/mtest-30723/.s.monetdb.32584 -# cmdline opt monet_prompt = -# cmdline opt mal_listing = 2 -# cmdline opt gdk_dbpath = /home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users -# cmdline opt mal_listing = 0 -# cmdline opt embedded_r = yes -# cmdline opt gdk_debug = 536870922 - -# 10:44:51 > -# 10:44:51 > "/usr/bin/python2" "grantMonetdb.SQL.py" "grantMonetdb" -# 10:44:51 > - -MAPI = (alice) /var/tmp/mtest-8540/.s.monetdb.34898 -QUERY = CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library; -ERROR = !CREATE USER: access denied for user 'alice' -CODE = M0M27 -MAPI = (alice) /var/tmp/mtest-30274/.s.monetdb.37685 -QUERY = GRANT sysadmin TO april; -ERROR = !GRANT: Insufficient privileges to grant ROLE 'sysadmin' -CODE = 0P000 - -# 10:44:51 > -# 10:44:51 > "Done." -# 10:44:51 > - diff --git a/sql/test/Users/Tests/grantMonetdb.stable.out b/sql/test/Users/Tests/grantMonetdb.stable.out deleted file mode 100644 --- a/sql/test/Users/Tests/grantMonetdb.stable.out +++ /dev/null @@ -1,39 +0,0 @@ -stdout of test 'grantMonetdb` in directory 'sql/test/Users` itself: - - -# 10:44:50 > -# 10:44:50 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32584" "--set" "mapi_usock=/var/tmp/mtest-30723/.s.monetdb.32584" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" -# 10:44:50 > - -# MonetDB 5 server v11.22.0 -# This is an unreleased version -# Serving database 'mTests_sql_test_Users', using 8 threads -# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked -# Found 3.746 GiB available main-memory. -# Copyright (c) 1993-July 2008 CWI. -# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved -# Visit http://www.monetdb.org/ for further information -# Listening for connection requests on mapi:monetdb://buzu:32584/ -# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-30723/.s.monetdb.32584 -# Start processing logs sql/sql_logs version 52200 -# Start reading the write-ahead log 'sql_logs/sql/log.18' -# Finished reading the write-ahead log 'sql_logs/sql/log.18' -# Finished processing logs sql/sql_logs -# MonetDB/SQL module loaded -# MonetDB/R module loaded - - -# 10:44:51 > -# 10:44:51 > "/usr/bin/python2" "grantMonetdb.SQL.py" "grantMonetdb" -# 10:44:51 > - -#GRANT monetdb TO alice; -#SET ROLE monetdb; -#CREATE USER may WITH PASSWORD 'may' NAME 'May' SCHEMA library; -#GRANT ALL ON orders TO april; -#GRANT monetdb TO april; - -# 10:44:51 > -# 10:44:51 > "Done." -# 10:44:51 > - diff --git a/sql/test/Users/Tests/withGrantOption.SQL.py b/sql/test/Users/Tests/withGrantOption.SQL.py --- a/sql/test/Users/Tests/withGrantOption.SQL.py +++ b/sql/test/Users/Tests/withGrantOption.SQL.py @@ -3,31 +3,46 @@ # Verify that the user can regrant the privilege. ### -import os, sys -try: - from MonetDBtesting import process -except ImportError: - import process +from MonetDBtesting.sqltest import SQLTestCase + +with SQLTestCase() as mdb: + mdb.connect(username="monetdb", password="monetdb") -def sql_test_client(user, passwd, input): - with process.client(lang="sql", user=user, passwd=passwd, communicate=True, - stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE, - input=input, port=int(os.getenv("MAPIPORT"))) as c: - c.communicate() + mdb.execute("CREATE SCHEMA library;").assertSucceeded() + mdb.execute("CREATE SCHEMA bank;").assertSucceeded() + mdb.execute("CREATE TABLE bank.loans(nr int, amount int);").assertSucceeded() + + mdb.execute("CREATE USER alice WITH PASSWORD 'alice' name 'alice' schema library;").assertSucceeded() + mdb.execute("CREATE USER april WITH PASSWORD 'april' name 'april' schema library;").assertSucceeded() + + mdb.execute("GRANT SELECT ON bank.loans TO april WITH GRANT OPTION;").assertSucceeded() + mdb.execute("GRANT INSERT ON bank.loans TO april WITH GRANT OPTION;").assertSucceeded() + mdb.execute("GRANT UPDATE ON bank.loans TO april WITH GRANT OPTION;").assertSucceeded() + mdb.execute("GRANT DELETE ON bank.loans TO april WITH GRANT OPTION;").assertSucceeded() -sql_test_client('monetdb', 'monetdb', input="""\ -GRANT SELECT ON bank.loans TO april WITH GRANT OPTION; -GRANT INSERT ON bank.loans TO april WITH GRANT OPTION; -GRANT UPDATE ON bank.loans TO april WITH GRANT OPTION; -GRANT DELETE ON bank.loans TO april WITH GRANT OPTION; -""") - + with SQLTestCase() as tc: + tc.connect(username="alice", password="alice") + # alice doesn't have access to bank.loans yet + tc.execute("INSERT INTO bank.loans VALUES (12, 127), (42, 8191);").assertFailed(err_code='42000', err_message="INSERT INTO: insufficient privileges for user 'alice' to insert into table 'loans'") + tc.execute("UPDATE bank.loans SET amount = amount - 100 WHERE nr = 42;").assertFailed(err_code='42000', err_message="UPDATE: insufficient privileges for user 'alice' to update table 'loans'") + tc.execute("DELETE FROM bank.loans WHERE nr = 12;").assertFailed(err_code='42000', err_message="DELETE FROM: insufficient privileges for user 'alice' to delete from table 'loans'") + tc.execute("SELECT * FROM bank.loans;").assertFailed(err_code='42000', err_message="SELECT: access denied for alice to table 'bank.loans'") + # let april grant alice all rights + tc.connect(username="april", password="april") + tc.execute("GRANT SELECT ON bank.loans TO alice WITH GRANT OPTION;").assertSucceeded() + tc.execute("GRANT INSERT ON bank.loans TO alice WITH GRANT OPTION;").assertSucceeded() + tc.execute("GRANT UPDATE ON bank.loans TO alice WITH GRANT OPTION;").assertSucceeded() + tc.execute("GRANT DELETE ON bank.loans TO alice WITH GRANT OPTION;").assertSucceeded() -sql_test_client('april', 'april', input="""\ -GRANT SELECT ON bank.loans TO alice WITH GRANT OPTION; -GRANT INSERT ON bank.loans TO alice WITH GRANT OPTION; -GRANT UPDATE ON bank.loans TO alice WITH GRANT OPTION; -GRANT DELETE ON bank.loans TO alice WITH GRANT OPTION; -""") + tc.execute("INSERT INTO bank.loans VALUES (12, 127), (42, 8191);").assertRowCount(2) + tc.execute("UPDATE bank.loans SET amount = amount - 100 WHERE nr = 42;").assertRowCount(1) + tc.execute("DELETE FROM bank.loans WHERE nr = 12;").assertRowCount(1) + tc.execute("SELECT * FROM bank.loans;").assertSucceeded().assertDataResultMatch([(42, 8091)]) + # clean up + mdb.execute("DROP TABLE bank.loans;").assertSucceeded() + mdb.execute("DROP USER april;").assertSucceeded() + mdb.execute("DROP USER alice;").assertSucceeded() + mdb.execute("DROP SCHEMA bank;").assertSucceeded() + mdb.execute("DROP SCHEMA library;").assertSucceeded() diff --git a/sql/test/Users/Tests/withGrantOption.stable.err b/sql/test/Users/Tests/withGrantOption.stable.err deleted file mode 100644 --- a/sql/test/Users/Tests/withGrantOption.stable.err +++ /dev/null @@ -1,37 +0,0 @@ -stderr of test 'withGrantOption` in directory 'sql/test/Users` itself: - - -# 10:30:19 > -# 10:30:19 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38464" "--set" "mapi_usock=/var/tmp/mtest-28429/.s.monetdb.38464" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/BUILD/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" -# 10:30:19 > - -# builtin opt gdk_dbpath = /home/vera/Desktop/MonetDB/BUILD/var/monetdb5/dbfarm/demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# builtin opt monet_prompt = > -# builtin opt monet_daemon = no -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_autosense = false _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list