[23.12.0] - 2023-12-08

Features

- Clusterwide SQL is available via `\set language sql` in the
  interactive console with the support of global and sharded tables.

- Implement request authorization based on access control lists (ACL).

- Implement security audit log.

- Implement automatic failover of replicaset leaders.

- Introduce Web UI. It includes cluster status panel and replicaset
  list. Current status of Web UI is still beta.

CLI

- Interactive console is disabled by default. Enable it implicitly with
  `picodata run -i`.

- Allow specifying `picodata connect [user@][host][:port]` format. It
  overrides the `--user` option.

- Allow connecting interactive console over a unix socket
  `picodata run --console-sock`. Use `picodata connect --unix`
  to connect. Unlike connecting to a `--listen` address, console
  communication occurs in plain text and always operates under the
  admin account.

- New option `picodata connect --password-file` allows supplying
  password in a plain-text file.

- Block a user after 4 failed login attempts.

- Enable the audit log with `picodata run --audit`.

Lua API

- Changes in terminology - all appearances of `space` changed to `table`
- Update `pico.LUA_API_VERSION`: `1.0.0` -> `3.1.0`
- New semantics of `pico.create_table()`. It's idempotent now.
- `pico.create_table()` has new optional parameter: `engine`.
  Note: global spaces can only have memtx engine.
- `pico.whoami()` and `pico.instance_info()` returns new field `tier`
- Add `pico.sql()`
- Add `pico.drop_table()`
- Add `pico.create_user()`, `pico.drop_user()`
- Add `pico.create_role()`, `pico.drop_role()`
- Add `pico.grant_privilege()`, `pico.revoke_privilege()`
- Add `pico.raft_term()`
- Add `pico.change_password()`
- Add `pico.wait_ddl_finalize()`
- Make `pico.cas` follow access control rules
- `pico.cas` now verifies dml operations before applying them
- Change `pico.raft_log()` arguments
- Make `opts.timeout` optional in most functions

Compatibility

- The current version is NOT compatible with prior releases. It cannot
  be started with the old snapshots.