Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Properly grant rights to read-only user when switching out word table #3331

Merged
merged 1 commit into from
Feb 6, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions nominatim/tokenizer/icu_tokenizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def init_new_db(self, config: Configuration, init_db: bool = True) -> None:

if init_db:
self.update_sql_functions(config)
self._setup_db_tables(config, 'word')
self._setup_db_tables(config)
self._create_base_indices(config, 'word')


Expand Down Expand Up @@ -128,6 +128,10 @@ def update_statistics(self, config: Configuration) -> None:
FROM word LEFT JOIN word_frequencies wf
ON word.word_id = wf.id""")
cur.drop_table('word_frequencies')

sqlp = SQLPreprocessor(conn, config)
sqlp.run_string(conn,
'GRANT SELECT ON tmp_word TO "{{config.DATABASE_WEBUSER}}"')
conn.commit()
self._create_base_indices(config, 'tmp_word')
self._create_lookup_indices(config, 'tmp_word')
Expand Down Expand Up @@ -234,28 +238,29 @@ def _save_config(self) -> None:
self.loader.save_config_to_db(conn)


def _setup_db_tables(self, config: Configuration, table_name: str) -> None:
def _setup_db_tables(self, config: Configuration) -> None:
""" Set up the word table and fill it with pre-computed word
frequencies.
"""
with connect(self.dsn) as conn:
with conn.cursor() as cur:
cur.drop_table(table_name)
cur.drop_table('word')
sqlp = SQLPreprocessor(conn, config)
sqlp.run_string(conn, """
CREATE TABLE {{table_name}} (
CREATE TABLE word (
word_id INTEGER,
word_token text NOT NULL,
type text NOT NULL,
word text,
info jsonb
) {{db.tablespace.search_data}};
GRANT SELECT ON {{table_name}} TO "{{config.DATABASE_WEBUSER}}";
GRANT SELECT ON word TO "{{config.DATABASE_WEBUSER}}";

DROP SEQUENCE IF EXISTS seq_{{table_name}};
CREATE SEQUENCE seq_{{table_name}} start 1;
GRANT SELECT ON seq_{{table_name}} to "{{config.DATABASE_WEBUSER}}";
""", table_name=table_name)
DROP SEQUENCE IF EXISTS seq_word;
CREATE SEQUENCE seq_word start 1;
GRANT SELECT ON seq_word to "{{config.DATABASE_WEBUSER}}";
""")
conn.commit()


def _create_base_indices(self, config: Configuration, table_name: str) -> None:
Expand All @@ -276,6 +281,7 @@ def _create_base_indices(self, config: Configuration, table_name: str) -> None:
""",
table_name=table_name, idx_name=name,
column_type=ctype)
conn.commit()


def _create_lookup_indices(self, config: Configuration, table_name: str) -> None:
Expand All @@ -289,6 +295,7 @@ def _create_lookup_indices(self, config: Configuration, table_name: str) -> None
ON {{table_name}} USING BTREE (word_id) {{db.tablespace.search_index}}
""",
table_name=table_name)
conn.commit()


def _move_temporary_word_table(self, old: str) -> None:
Expand Down
Loading