You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The DSN-based connection configuration is closer to what PHP does with PDO
objects under the hood and this allows the use of more scenarios such as socket
connections and more databases out-of-the-box without user_backend_sql_raw
having to provide configuration parameters for each option and database.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+14-3Lines changed: 14 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,20 @@
1
1
# Changelog
2
2
3
-
All notable changes to this project will be documented in this file.
3
+
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
+
5
+
## [Unreleased]
6
+
7
+
### Addded
8
+
9
+
* DSN-based database connection mechanism. This enables support for socket-based database connections and also connections to Firebird, MS SQL, Oracle DB, ODBC, DB2, SQLite, Informix and IBM databases - basically whatever the [PHP PDO-driver](https://www.php.net/manual/en/pdo.drivers.php) supports. But PostgreSQL remains the only tested database and MySQL/MariaDB to some degree. The other databaes should "just work", but this has not been tested.
10
+
*`dsn` configuration key
11
+
* dependancy on PHP >=8.0
12
+
13
+
### Removed
14
+
15
+
***Breaking**: remove configuration keys `db_type`, `db_host`, `db_port`, `db_name`, `mariadb_charset`. These settings must now be included in the DSN string. See [README.md](README.md#1database) on how to do this.
16
+
* support for Nextcloud <26, because Nextcloud 26 is the first to require PHP 8.0, which this app now also requires
4
17
5
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
'get_password_hash_for_user' => 'SELECT password_hash FROM users_fqda WHERE fqda = :username',
55
-
'user_exists' => 'SELECT EXISTS(SELECT 1 FROM users_fqda WHERE fqda = :username)',
56
-
'get_users' => 'SELECT fqda FROM users_fqda WHERE (fqda ILIKE :search) OR (display_name ILIKE :search)',
57
-
//'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)',
58
-
//'delete_user' => 'DELETE FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
59
-
//'get_display_name' => 'SELECT display_name FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
60
-
//'set_display_name' => 'UPDATE users SET display_name = :new_display_name WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
'get_password_hash_for_user' => 'SELECT password_hash FROM users_fqda WHERE fqda = :username',
55
+
'user_exists' => 'SELECT EXISTS(SELECT 1 FROM users_fqda WHERE fqda = :username)',
56
+
'get_users' => 'SELECT fqda FROM users_fqda WHERE (fqda ILIKE :search) OR (display_name ILIKE :search)',
57
+
//'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)',
58
+
//'delete_user' => 'DELETE FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
59
+
//'get_display_name' => 'SELECT display_name FROM users WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
60
+
//'set_display_name' => 'UPDATE users SET display_name = :new_display_name WHERE local = split_part(:username, \'@\', 1) AND domain = split_part(:username, \'@\', 2)',
|`db_type`|`postgresql` or `mariadb`|`postgresql`|
78
-
|`db_host`| your db host such as `localhost` or `db.example.com` or (only for PostgreSQL) path to socket, e.g. `/var/run/postgresql`|`localhost`|
79
-
|`db_port`| your db port |`5432`|
80
-
|`db_name`| your db name ||
81
-
|`db_user`| your db user ||
82
-
|`db_password`| your db password ||
83
-
|`db_password_file`| path to file containing the db password ||
84
-
|`mariadb_charset`| the charset for mariadb connections |`utf8mb4`|
85
-
86
-
* Values without a default value are mandatory, except that
87
-
* only one of `db_password` or `db_passowrd_file` must be set.
88
-
* Only the first line of the file specified by `db_passowrd_file` is read.
75
+
*`dsn`: check how to construct DSNs for [PostgreSQL](https://www.php.net/manual/en/ref.pdo-pgsql.connection.php) and [MySQL](https://www.php.net/manual/en/ref.pdo-mysql.connection.php).
76
+
*`db_user`: user that will be used to connect to the database
77
+
*`db_password`: password for the user that will be used to connect to the database
78
+
*`db_password_file`: Can be set to read the password from a file
79
+
* Only the first line of the file specified by `db_password_file` is read.
89
80
* Not more than 100 characters of the first line are read.
90
-
* Whitespace-like characters are [stripped](https://www.php.net/manual/en/function.trim.php) from
81
+
* Whitespace-like characters are [trimmed](https://www.php.net/manual/en/function.trim.php) from
91
82
the beginning and end of the read password.
92
-
* If you specify a socket as `db_host` (only for PostgreSQL), you need to put
93
-
dummy values for the mandatory values, although they are not required for the
94
-
socket connection. This will be fixed in a future release.
83
+
84
+
There are two methods to configure the database connection:
85
+
86
+
1. Set `dsn` to a DSN that contains the entire db connnection configuration including the db user and db password
87
+
2. Set `dsn` to a DSN that contains everything **but** the db user and db password and then set `db_user` and `db_password`/`db_password_file`
88
+
89
+
PostgreSQL works with method 1 and 2. MySQL works only with method 2. If you use `db_password_file` also set `db_user` (even for PostgreSQL) and don't put the username in the DSN. This is because, the underlying PDO classes have some quirks and diverge from the documented behaviour. So, better don't mix both methods. `db_password_file` has higher priority than `db_password`, but lower priority than password in DSN. But it's better to only set one source for the password, for the same reasons.
90
+
91
+
#### Examples
92
+
93
+
* connect to PostgreSQL via a socket with ident authentication which requires no user or password at all:
'db_password' => 'thePasswordForTheDbUser', // or db_password_file instead
123
+
```
124
+
125
+
For other databases check their [PDO driver documentation pages](https://www.php.net/manual/en/pdo.drivers.php) which in-turn link to their respective DSN references. They either use method 1 or method 2 AFAICS.
95
126
96
127
### 2. SQL Queries
97
128
@@ -136,8 +167,6 @@ The config values are `md5`, `sha256`, `sha512`, `argon2i`, `argon2id` respectiv
136
167
* This means, that your db can have different hash formats simultaneously. Whenever a
137
168
user's password is changed, it will be updated to the configured hash algorithm. This eases
138
169
migration to more modern algorithms.
139
-
* Argon2i is only supported by PHP 7.2.0 and higher.
140
-
* Argon2id is only supported by PHP 7.3.0 and higher.
Copy file name to clipboardExpand all lines: appinfo/info.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ In contrast to the app *SQL user backend*, you write the SQL queries yourself. Y
14
14
The app uses prepared statements and is written to be secure by default to prevent SQL injections. It understands the most popular standards for password hash formats: MD5-CRYPT, SHA256-CRYPT, SHA512-CRYPT, BCrypt and the state-of-the-art Argon2i and Argon2id. Because the various formats are recognized on-the-fly your db can can have differing hash string formats at the same time, which eases migration to newer formats.
15
15
16
16
This app supports PostgreSQL and MariaDB/MySQL.]]></description>
0 commit comments