Public
Snippet $50 authored by Owo Sugiana

Database Grant

grant.py
import sys
from configparser import ConfigParser
from sqlalchemy import create_engine


conf_file = sys.argv[1]
conf = ConfigParser()
conf.read(conf_file)

cf = conf['main']

sql_table_tpl = 'GRANT SELECT ON {table} TO ' + cf['user']
sql_schema_tpl = 'GRANT USAGE ON SCHEMA {schema} TO ' + cf['user']

for line in cf:
    if line.find('db_url') < 0:
        continue
    db = line.strip().replace('_db_url', '')
    print(f'Database {db}')
    db_url = cf[line]
    engine = create_engine(db_url)
    schema_line = db + '_schemas'
    for schema in cf[schema_line].split():
        sql = sql_schema_tpl.format(schema=schema)
        print(sql)
        engine.execute(sql)
    table_line = db + '_tables'
    for tablename in cf[table_line].split():
        sql = sql_table_tpl.format(table=tablename)
        print(sql)
        engine.execute(sql)