Nextcloud + User Backend SQL Raw

Fórumok

Sziasztok!

 

Adott egy e-mail szerver amin a nextcloud (is) kezeli a felhasználókat akik így az email címükkel jelentkeztek be (több családi domain, semmi kereskedelmi megoldás). Eddig egyetlen nextcloud volt, most kérésre egy hosszabb teszt erejéig kell egy nextcloudot egy másik szerverre telepítenem ahol szintén levelezéssel együtt van rá szükség. Azt szeretném napok óta elérni, hogy ezen a nextcloudon csak egyetlen domain userei lennének láthatók/elérhetők, de egy istennek sem sikerül. A felhasználók kezelése a User Backend SQL Raw pluginnel megy évek óta problémamentesen, amihez a config.php-be a következő kódot kell illeszteni:

'user_backend_sql_raw' => array(
    'db_name' => 'mail_server',
    'db_user' => 'mail_admin',
    'db_password' => 'USE_PASSWORD_DB_MAIL_ADMIN',
    'queries' => array(
        'get_password_hash_for_user' => 'SELECT password_hash FROM users_fqda WHERE fqda = :username',
        'user_exists' => 'SELECT EXISTS(SELECT 1 FROM users_fqda WHERE fqda = :username)',
        'get_users' => 'SELECT fqda FROM users_fqda WHERE (fqda ILIKE :search) OR (display_name ILIKE :search)',
        'set_password_hash_for_user' => 'UPDATE users SET password_hash = :new_password_hash WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
        'delete_user' => 'DELETE FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
        'get_display_name' => 'SELECT display_name FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
        'set_display_name' => 'UPDATE users SET display_name = :new_display_name WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
        'count_users' => 'SELECT COUNT (*) FROM users',
        'create_user' => 'INSERT INTO users (local, domain, password_hash) VALUES (split_part(:username, \'@\', 1), split_part(:username, \'@\', 2), :password_hash)',
    ),
    'hash_algorithm_for_new_passwords' => 'argon2id',
),

Hogy a fenébe kell ebben beállítani, hogy a domain részt ne kérdezze le az adatbázisból, hanem legyen egy fixen beállított domain?
Nem vagyok sql guru, csak alapismereteim vannak és már két napja kísérletezek, próbáltam a \%valami.xxx%\-t beilleszteni a get_users-be meg az összes domain szó helyére is (próbáltam, hogy csak a get_users és a get_display_name-t hagytam a lekérdezésben, hatástalanul), de az occ user:list vagy hibára fut vagy kilistázza az összes domaint és a távoli nextcloud létre is hozza a könyvtáraikat :(. A legjobb lenne ha a 'queries' => array() előtt beállíthatnám egy változóban, de ha fixen drótozottan megy, az se lenne baj, de se így se úgy nem jöttem rá a helyes útra :(

Van valakinek ötlete/megoldása erre?

Hozzászólások

Szerkesztve: 2024. 02. 20., k – 07:40

Tudom, hogy ez egy rövid monológnak hat, de azt hiszem megvan a megoldás! Kellett egy új nézet a "users_fqda" helyett amiben csak az adott domain szerepel.  A nézet létrehozása:

CREATE VIEW users_fqda_domain_amit_akarsz_kezelni AS
SELECT fqda, display_name
FROM users_fqda
WHERE fqda ILIKE '%@domain_amit_akarsz_kezelni';

ezután jogokat kell neki adni:
 

GRANT SELECT ON users_fqda_domain_amit_akarsz_kezelni TO mail_admin;

GRANT INSERT, UPDATE, DELETE ON users_fqda_domain_amit_akarsz_kezelni TO mail_admin;

így a lekérdezésben is módosítani kell az új nézetre kb így: csere "users_fqda" erre "users_fqda_domain_amit_akarsz_kezelni".

..szom, 7-től munkaidő, de még fel sem öltöztem....

„Niemand ist unnütz! Man kann immer noch als schlechtes Beispiel dienen!”

dzsolt