Skip to content
Snippets Groups Projects
Unverified Commit b3f47b34 authored by metamben's avatar metamben Committed by GitHub
Browse files

Generate unique user name in table-privileges-test (#39457)

* Generate unique user name in table-privileges-test
parent 99e4ce44
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@
[metabase.driver.sql-jdbc.sync.describe-database
:as sql-jdbc.describe-database]
[metabase.driver.sql.query-processor :as sql.qp]
[metabase.driver.sql.test-util.unique-prefix :as sql.tu.unique-prefix]
[metabase.models.database :refer [Database]]
[metabase.models.field :refer [Field]]
[metabase.models.table :refer [Table]]
......@@ -409,7 +410,7 @@
(testing "`table-privileges` should return the correct data for current_user and role privileges"
(mt/with-temp [Database _database {:engine :redshift, :details (tx/dbdef->connection-details :redshift nil nil)}]
(let [schema-name (redshift.test/unique-session-schema)
username "privilege_rows_test_example_role"
username (str (sql.tu.unique-prefix/unique-prefix) "privilege_rows_test_role")
table-name "test_tp_table"
qual-tbl-name (format "\"%s\".\"%s\"" schema-name table-name)
view-nm "test_tp_view"
......@@ -419,64 +420,64 @@
conn-spec (sql-jdbc.conn/db->pooled-connection-spec (mt/db))
get-privileges (fn []
(sql-jdbc.conn/with-connection-spec-for-testing-connection
[spec [:redshift (assoc (:details (mt/db)) :user username)]]
[spec [:redshift (assoc (:details (mt/db)) :user username)]]
(with-redefs [sql-jdbc.conn/db->pooled-connection-spec (fn [_] spec)]
(set (sql-jdbc.sync/current-user-table-privileges driver/*driver* spec)))))]
(try
(execute! (format
(str
"CREATE TABLE %1$s (id INTEGER);\n"
"CREATE VIEW %2$s AS SELECT * from %1$s;\n"
"CREATE MATERIALIZED VIEW %3$s AS SELECT * from %1$s;\n"
"CREATE USER %4$s WITH PASSWORD '%5$s';\n"
"GRANT SELECT ON %1$s TO %4$s;\n"
"GRANT UPDATE ON %1$s TO %4$s;\n"
"GRANT SELECT ON %2$s TO %4$s;\n"
"GRANT SELECT ON %3$s TO %4$s;")
qual-tbl-name
qual-view-name
qual-mview-name
username
(get-in (mt/db) [:details :password])))
(testing "check that without USAGE privileges on the schema, nothing is returned"
(is (= #{}
(get-privileges))))
(testing "with USAGE privileges, SELECT and UPDATE privileges are returned"
(jdbc/execute! conn-spec (format "GRANT USAGE ON SCHEMA \"%s\" TO %s;" schema-name username))
(is (= #{{:role nil
:schema schema-name
:table table-name
:update true
:select true
:insert false
:delete false}
{:role nil
:schema schema-name
:table view-nm
:update false
:select true
:insert false
:delete false}
{:role nil
:schema schema-name
:table mview-name
:select true
:update false
:insert false
:delete false}}
(get-privileges))))
(finally
(execute! (format
(str
"DROP TABLE IF EXISTS %2$s CASCADE;\n"
"DROP VIEW IF EXISTS %3$s CASCADE;\n"
"DROP MATERIALIZED VIEW IF EXISTS %4$s CASCADE;\n"
"REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA \"%1$s\" FROM %5$s;\n"
"REVOKE ALL PRIVILEGES ON SCHEMA \"%1$s\" FROM %5$s;\n"
"REVOKE USAGE ON SCHEMA \"%1$s\" FROM %5$s;\n"
"DROP USER IF EXISTS %5$s;")
schema-name
"CREATE TABLE %1$s (id INTEGER);\n"
"CREATE VIEW %2$s AS SELECT * from %1$s;\n"
"CREATE MATERIALIZED VIEW %3$s AS SELECT * from %1$s;\n"
"CREATE USER \"%4$s\" WITH PASSWORD '%5$s';\n"
"GRANT SELECT ON %1$s TO \"%4$s\";\n"
"GRANT UPDATE ON %1$s TO \"%4$s\";\n"
"GRANT SELECT ON %2$s TO \"%4$s\";\n"
"GRANT SELECT ON %3$s TO \"%4$s\";")
qual-tbl-name
qual-view-name
qual-mview-name
username)))))))))
username
(get-in (mt/db) [:details :password])))
(testing "check that without USAGE privileges on the schema, nothing is returned"
(is (= #{}
(get-privileges))))
(testing "with USAGE privileges, SELECT and UPDATE privileges are returned"
(jdbc/execute! conn-spec (format "GRANT USAGE ON SCHEMA \"%s\" TO \"%s\";" schema-name username))
(is (= #{{:role nil
:schema schema-name
:table table-name
:update true
:select true
:insert false
:delete false}
{:role nil
:schema schema-name
:table view-nm
:update false
:select true
:insert false
:delete false}
{:role nil
:schema schema-name
:table mview-name
:select true
:update false
:insert false
:delete false}}
(get-privileges))))
(finally
(execute! (format
(str
"DROP TABLE IF EXISTS %2$s CASCADE;\n"
"DROP VIEW IF EXISTS %3$s CASCADE;\n"
"DROP MATERIALIZED VIEW IF EXISTS %4$s CASCADE;\n"
"REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA \"%1$s\" FROM \"%5$s\";\n"
"REVOKE ALL PRIVILEGES ON SCHEMA \"%1$s\" FROM \"%5$s\";\n"
"REVOKE USAGE ON SCHEMA \"%1$s\" FROM \"%5$s\";\n"
"DROP USER IF EXISTS \"%5$s\";")
schema-name
qual-tbl-name
qual-view-name
qual-mview-name
username)))))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment