64 lines
4.3 KiB
SQL
64 lines
4.3 KiB
SQL
-- ============================================================================
|
|
-- Een aparte databasegebruiker voor de applicatie, met alleen de rechten die
|
|
-- hij nodig heeft: geen CREATE, geen DROP, geen ALTER. Schemawijzigingen doe
|
|
-- je met een migratie onder je eigen account, niet vanuit de draaiende
|
|
-- applicatie.
|
|
--
|
|
-- Vervang het wachtwoord hieronder en bewaar het niet in de broncode --
|
|
-- zie docs/Beveiliging.md, "Waar de geheimen staan".
|
|
--
|
|
-- Draaien (in cmd, NIET in PowerShell):
|
|
-- mysql -u root -p < 02_applicatiegebruiker.sql
|
|
--
|
|
-- Opnieuw draaien mag en is veilig: CREATE USER IF NOT EXISTS slaat de hele regel over als de
|
|
-- gebruiker al bestaat, dus het wachtwoord verandert niet. Dat is precies wat je doet als er
|
|
-- tabellen bij zijn gekomen.
|
|
--
|
|
-- LET OP: komt er een tabel bij, dan hoort hij hier ook bij te staan. Zonder recht krijgt de
|
|
-- applicatie "SELECT command denied" - en dat merk je pas als iemand dat scherm opent. Er is
|
|
-- een zelftest die elke CREATE TABLE in deze map naast deze lijst legt.
|
|
--
|
|
-- En hier, in DIT bestand, en nergens anders. Sommige migratiescripts deelden vroeger zelf
|
|
-- rechten uit, vlak onder hun CREATE TABLE. Dat leest prettig, maar de scripts vanaf 03 worden
|
|
-- ook door de uitrolagent gedraaid met een beperkt databaseaccount, en dat mag geen rechten
|
|
-- uitdelen: de uitrol struikelde er dan op. Rechten uitdelen is inrichten, en dat doet een mens
|
|
-- één keer als root. De zelftest bewaakt ook dat.
|
|
-- ============================================================================
|
|
|
|
CREATE USER IF NOT EXISTS 'mijnbesluit_app'@'localhost'
|
|
IDENTIFIED BY 'VERVANG_DIT_WACHTWOORD';
|
|
|
|
-- De rechten worden per tabel gegeven en niet in één keer op de hele database.
|
|
-- Dat is met opzet: rechten in MariaDB zijn optellend, dus een recht dat op
|
|
-- databaseniveau is gegeven kun je op tabelniveau niet meer afnemen. Wil je
|
|
-- het logboek onwijzigbaar houden, dan mag UPDATE/DELETE op de database dus
|
|
-- nooit gegeven worden.
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`persons` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`users` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`families` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`family_members` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`invitations` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`vault_items` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`vault_files` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`content_grants` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`messages` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`death_declarations` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`legacy_managers` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`refresh_tokens` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`login_codes` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`toestellen` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`samenvoegingen` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`adverteerders` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`campagnes` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`campagne_uren` TO 'mijnbesluit_app'@'localhost';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `mijnbesluit`.`sessies` TO 'mijnbesluit_app'@'localhost';
|
|
|
|
-- Het logboek mag er alleen bij komen en uit gelezen worden, niet uit verdwijnen.
|
|
GRANT SELECT, INSERT ON `mijnbesluit`.`audit_log` TO 'mijnbesluit_app'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
-- Controle: audit_log hoort alleen SELECT en INSERT te hebben, de rest alles behalve DDL.
|
|
SHOW GRANTS FOR 'mijnbesluit_app'@'localhost';
|