Files

74 lines
3.5 KiB
Python

#!/usr/bin/env python
"""Create test accounts and known grants only in the disposable audit databases."""
import time
from db import connect, engine
admin = {'mysql': 'root', 'mariadb': 'root', 'postgres': 'postgres', 'mssql': 'sa', 'oracle': 'sys'}[engine]
for attempt in range(120):
try:
conn = connect(admin)
break
except Exception:
if attempt == 119:
raise
time.sleep(1)
cursor = conn.cursor()
def execute(sql):
cursor.execute(sql)
if engine in ('mysql', 'mariadb'):
execute('CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100),surname VARCHAR(100))')
for user in ('audit_app', 'audit_limited'):
execute("CREATE USER '%s'@'%%' IDENTIFIED BY 'AuditOnly!2026'" % user)
execute("GRANT SELECT ON auditlab.* TO '%s'@'%%'" % user)
execute("GRANT SELECT ON performance_schema.* TO 'audit_app'@'%'")
execute("GRANT FILE ON *.* TO 'audit_app'@'%'")
elif engine == 'postgres':
execute('CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100),surname VARCHAR(100))')
for user in ('audit_app', 'audit_limited'):
execute("CREATE USER %s WITH PASSWORD 'AuditOnly!2026'" % user)
execute('GRANT SELECT ON users TO %s' % user)
execute('GRANT pg_read_server_files TO audit_app')
execute('GRANT pg_write_server_files TO audit_app')
execute("ALTER ROLE audit_app SET row_security=off")
elif engine == 'mssql':
execute('CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100),surname VARCHAR(100))')
for user in ('audit_app', 'audit_limited'):
execute("CREATE LOGIN %s WITH PASSWORD='AuditOnly!2026',CHECK_POLICY=OFF" % user)
execute('CREATE USER %s FOR LOGIN %s' % (user,user))
execute('GRANT SELECT ON users TO %s' % user)
execute('DENY SELECT ON OBJECT::sys.configurations TO audit_limited')
execute('DENY SELECT ON OBJECT::sys.servers TO audit_limited')
execute("EXEC sp_configure 'show advanced options',1")
execute('RECONFIGURE')
execute("EXEC sp_configure 'clr enabled',1")
execute('RECONFIGURE')
execute("EXEC sp_addlinkedserver @server=N'audit_reporting',@srvproduct=N'',@provider=N'MSOLEDBSQL',@datasrc=N'reporting.invalid'")
execute("EXEC sp_serveroption @server=N'audit_reporting',@optname=N'rpc out',@optvalue=N'true'")
else:
execute('GRANT DBA TO audit_owner')
for user in ('audit_app', 'audit_limited'):
execute('CREATE USER %s IDENTIFIED BY "AuditOnly!2026"' % user)
execute('GRANT CREATE SESSION TO %s' % user)
execute('CREATE TABLE audit_owner.users (id NUMBER PRIMARY KEY,name VARCHAR2(100),surname VARCHAR2(100))')
for user in ('audit_app', 'audit_limited'):
execute('GRANT SELECT ON audit_owner.users TO %s' % user)
execute('CREATE SYNONYM %s.users FOR audit_owner.users' % user)
execute('CREATE SYNONYM system.users FOR audit_owner.users')
execute('GRANT SELECT ON sys.v_$parameter TO audit_app')
execute("CREATE DIRECTORY AUDIT_FILES AS '/tmp/audit-files'")
execute('GRANT READ ON DIRECTORY AUDIT_FILES TO audit_app')
execute('CREATE SYNONYM audit_owner.audit_fixture_users FOR audit_owner.users')
# Insert into the application schema; the SYS/SYSTEM account is only the fixture provisioner.
execute("INSERT INTO audit_owner.users VALUES (1,'luther','blisset')")
execute("INSERT INTO audit_owner.users VALUES (2,'fluffy','bunny')")
conn.commit()
if engine != 'oracle':
execute("INSERT INTO users VALUES (1,'luther','blisset')")
execute("INSERT INTO users VALUES (2,'fluffy','bunny')")
conn.close()
print('%s fixture seeded' % engine)