Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
7ec5a06
bump alpine. more proper openssl commit
zvonand Feb 5, 2026
c4a9654
Merge pull request #1376 from Altinity/fix/25.8.14/cves-fix-1
zvonand Feb 6, 2026
fde1c04
pin version
MyroTk Feb 6, 2026
148dfb6
fix autogenerated version merge
MyroTk Feb 6, 2026
702dd4e
version test fix
MyroTk Feb 24, 2026
da33c8a
remove crash reports endpoint
strtgbb Mar 9, 2026
e6f3a5b
remove references to upstream from server/keeper dockerfile
strtgbb Feb 19, 2026
81628aa
Merge pull request #84770 from ClickHouse/vdimir/modify_column_null_t…
vdimir Dec 15, 2025
524671c
bump alpine. more proper openssl commit
zvonand Feb 5, 2026
2449d3d
Merge pull request #95301 from mkmkme/aggegate-crash
antaljanosbenjamin Feb 3, 2026
9ef761c
Merge pull request #89367 from ilejn/in_function_crash
KochetovNicolai Nov 13, 2025
d0a57f9
poke CI again
zvonand Feb 5, 2026
94ece17
Merge pull request #88090 from shankar-iyer/fix_is_deleted_with_filter
shankar-iyer Oct 9, 2025
a1615c4
fix build
zvonand Feb 9, 2026
199ae31
Merge pull request #72226 from ClickHouse/vdimir/fix72174
vdimir Nov 25, 2024
cfb8a8e
fix typo
zvonand Feb 13, 2026
7d7bd28
remove test
zvonand Feb 14, 2026
3a9425f
Merge pull request #96405 from ilejn/join_alias_dups
vdimir Feb 10, 2026
8ddecc5
Merge pull request #65277 from arthurpassos/multi_auth_methods
pufit Sep 16, 2024
8cdf2e1
fix
zvonand Feb 10, 2026
6030ebc
fix remaining tests
zvonand Feb 12, 2026
62294b9
Update regression hash - fix RBAC tests
CarlosFelipeOR Feb 18, 2026
375ac54
Merge pull request #88440 from korowa/fix-gby-overflow-sparse
antaljanosbenjamin Oct 15, 2025
9994737
Merge pull request #65362 from ClickHouse/revert-65361-revert-65164-ecs
alexey-milovidov Aug 19, 2024
d946daa
Merge pull request #94466 from ClickHouse/fix-crash-in-disabled-send-…
alexey-milovidov Jan 17, 2026
d218605
run ci on customizations push
strtgbb Mar 17, 2026
90066ff
Merge pull request #1494 from Altinity/cicd-fixes-24.8.14
strtgbb Mar 17, 2026
51057fd
Merge pull request #98960 from fastio/bugfix-98822
alexey-milovidov Mar 9, 2026
6da3227
fixed test
mkmkme Mar 18, 2026
e9f5832
Merge pull request #1544 from Altinity/backports/24.8.14/98960
zvonand Mar 20, 2026
18e4739
Merge branch 'customizations/24.8.14' into builds/24.8.14/pin_version
MyroTk Mar 20, 2026
bb179b2
Merge pull request #1381 from Altinity/builds/24.8.14/pin_version
MyroTk Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/release_branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ on: # yamllint disable-line rule:truthy
push:
branches:
- 'releases/24.8**'
- 'customizations/24.8**'
tags:
- '*'
workflow_dispatch:
Expand Down Expand Up @@ -552,7 +553,7 @@ jobs:
secrets: inherit
with:
runner_type: altinity-on-demand, altinity-regression-tester
commit: fc19ce3a7322a10ab791de755c950a56744a12e7
commit: b72ac10337ea9d7a0f764b86a40f4bb7dc0f81ff
arch: release
build_sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
timeout_minutes: 300
Expand All @@ -563,7 +564,7 @@ jobs:
secrets: inherit
with:
runner_type: altinity-on-demand, altinity-regression-tester-aarch64
commit: fc19ce3a7322a10ab791de755c950a56744a12e7
commit: b72ac10337ea9d7a0f764b86a40f4bb7dc0f81ff
arch: aarch64
build_sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
timeout_minutes: 300
Expand Down
6 changes: 3 additions & 3 deletions cmake/autogenerated_versions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ SET(VERSION_GITHASH c8a1e828dcf9832dc2d71adcbd50c698f93bb69b)

#10000 for altinitystable candidates
#20000 for altinityedge candidates
SET(VERSION_TWEAK 10500)
SET(VERSION_TWEAK 10545)
SET(VERSION_FLAVOUR altinitytest)

SET(VERSION_DESCRIBE v24.8.14.10500.altinitytest)
SET(VERSION_STRING 24.8.14.10500.altinitytest)
SET(VERSION_DESCRIBE v24.8.14.10545.altinitytest)
SET(VERSION_STRING 24.8.14.10545.altinitytest)

# end of autochange
2 changes: 1 addition & 1 deletion contrib/aws
2 changes: 1 addition & 1 deletion contrib/aws-crt-cpp
2 changes: 1 addition & 1 deletion contrib/openssl
Submodule openssl updated 1 files
+10 −0 crypto/rand/rand_lib.c
16 changes: 4 additions & 12 deletions docker/keeper/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ RUN arch=${TARGETARCH:-amd64} \
&& ln -s "${rarch}-linux-gnu" /lib/linux-gnu


FROM alpine:3.21.5
FROM alpine:3.21.6

ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
Expand All @@ -31,11 +31,8 @@ RUN arch=${TARGETARCH:-amd64} \
arm64) ln -sf /lib/ld-2.31.so /lib/ld-linux-aarch64.so.1 ;; \
esac

# lts / testing / prestable / etc
ARG REPO_CHANNEL="stable"
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
ARG VERSION="24.7.3.42"
ARG PACKAGES="clickhouse-keeper"
# NOTE (strtgbb): Removed install methods other than direct URL install to tidy the Dockerfile

ARG DIRECT_DOWNLOAD_URLS=""

# user/group precreated explicitly with fixed uid/gid on purpose.
Expand All @@ -59,12 +56,7 @@ RUN arch=${TARGETARCH:-amd64} \
&& wget -c -q "$url" \
; done \
else \
for package in ${PACKAGES}; do \
cd /tmp \
&& echo "Get ${REPOSITORY}/${package}-${VERSION}-${arch}.tgz" \
&& wget -c -q "${REPOSITORY}/${package}-${VERSION}-${arch}.tgz" \
&& wget -c -q "${REPOSITORY}/${package}-${VERSION}-${arch}.tgz.sha512" \
; done \
exit 1; \
fi \
&& cat *.tgz.sha512 | sha512sum -c \
&& for file in *.tgz; do \
Expand Down
15 changes: 5 additions & 10 deletions docker/server/Dockerfile.alpine
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ RUN arch=${TARGETARCH:-amd64} \
arm64) ln -sf /lib/ld-2.31.so /lib/ld-linux-aarch64.so.1 ;; \
esac

# lts / testing / prestable / etc
ARG REPO_CHANNEL="stable"
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
ARG VERSION="24.7.3.42"
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"


# NOTE (strtgbb): Removed install methods other than direct URL install to tidy the Dockerfile

ARG DIRECT_DOWNLOAD_URLS=""

# user/group precreated explicitly with fixed uid/gid on purpose.
Expand All @@ -56,11 +55,7 @@ RUN arch=${TARGETARCH:-amd64} \
&& wget -c -q "$url" \
; done \
else \
for package in ${PACKAGES}; do \
echo "Get ${REPOSITORY}/${package}-${VERSION}-${arch}.tgz" \
&& wget -c -q "${REPOSITORY}/${package}-${VERSION}-${arch}.tgz" \
&& wget -c -q "${REPOSITORY}/${package}-${VERSION}-${arch}.tgz.sha512" \
; done \
exit 1; \
fi \
&& cat *.tgz.sha512 | sed 's:/output/:/tmp/:' | sha512sum -c \
&& for file in *.tgz; do \
Expand Down
74 changes: 3 additions & 71 deletions docker/server/Dockerfile.ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,12 @@ RUN sed -i "s|http://archive.ubuntu.com|${apt_archive}|g" /etc/apt/sources.list
wget \
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*

ARG REPO_CHANNEL="stable"
ARG REPOSITORY="deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb ${REPO_CHANNEL} main"
ARG VERSION="24.7.3.42"
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"

#docker-official-library:off
# The part between `docker-official-library` tags is related to our builds

# set non-empty deb_location_url url to create a docker image
# from debs created by CI build, for example:
# docker build . --network host --build-arg version="21.4.1.6282" --build-arg deb_location_url="https://..." -t ...
ARG deb_location_url=""
ARG DIRECT_DOWNLOAD_URLS=""
# NOTE (strtgbb): Removed install methods other than direct URL install to tidy the Dockerfile

# set non-empty single_binary_location_url to create docker image
# from a single binary url (useful for non-standard builds - with sanitizers, for arm64).
ARG single_binary_location_url=""
ARG DIRECT_DOWNLOAD_URLS=""

ARG TARGETARCH

Expand All @@ -58,64 +47,7 @@ RUN if [ -n "${DIRECT_DOWNLOAD_URLS}" ]; then \
&& rm -rf /tmp/* ; \
fi

# install from a web location with deb packages
RUN arch="${TARGETARCH:-amd64}" \
&& if [ -n "${deb_location_url}" ]; then \
echo "installing from custom url with deb packages: ${deb_location_url}" \
&& rm -rf /tmp/clickhouse_debs \
&& mkdir -p /tmp/clickhouse_debs \
&& for package in ${PACKAGES}; do \
{ wget --progress=bar:force:noscroll "${deb_location_url}/${package}_${VERSION}_${arch}.deb" -P /tmp/clickhouse_debs || \
wget --progress=bar:force:noscroll "${deb_location_url}/${package}_${VERSION}_all.deb" -P /tmp/clickhouse_debs ; } \
|| exit 1 \
; done \
&& dpkg -i /tmp/clickhouse_debs/*.deb \
&& rm -rf /tmp/* ; \
fi

# install from a single binary
RUN if [ -n "${single_binary_location_url}" ]; then \
echo "installing from single binary url: ${single_binary_location_url}" \
&& rm -rf /tmp/clickhouse_binary \
&& mkdir -p /tmp/clickhouse_binary \
&& wget --progress=bar:force:noscroll "${single_binary_location_url}" -O /tmp/clickhouse_binary/clickhouse \
&& chmod +x /tmp/clickhouse_binary/clickhouse \
&& /tmp/clickhouse_binary/clickhouse install --user "clickhouse" --group "clickhouse" \
&& rm -rf /tmp/* ; \
fi

# The rest is the same in the official docker and in our build system
#docker-official-library:on

# A fallback to installation from ClickHouse repository
# It works unless the clickhouse binary already exists
RUN clickhouse local -q 'SELECT 1' >/dev/null 2>&1 && exit 0 || : \
; apt-get update \
&& apt-get install --yes --no-install-recommends \
dirmngr \
gnupg2 \
&& mkdir -p /etc/apt/sources.list.d \
&& GNUPGHOME=$(mktemp -d) \
&& GNUPGHOME="$GNUPGHOME" gpg --batch --no-default-keyring \
--keyring /usr/share/keyrings/clickhouse-keyring.gpg \
--keyserver hkp://keyserver.ubuntu.com:80 \
--recv-keys 3a9ea1193a97b548be1457d48919f6bd2b48d754 \
&& rm -rf "$GNUPGHOME" \
&& chmod +r /usr/share/keyrings/clickhouse-keyring.gpg \
&& echo "${REPOSITORY}" > /etc/apt/sources.list.d/clickhouse.list \
&& echo "installing from repository: ${REPOSITORY}" \
&& apt-get update \
&& for package in ${PACKAGES}; do \
packages="${packages} ${package}=${VERSION}" \
; done \
&& apt-get install --yes --no-install-recommends ${packages} || exit 1 \
&& rm -rf \
/var/lib/apt/lists/* \
/var/cache/debconf \
/tmp/* \
&& apt-get autoremove --purge -yq dirmngr gnupg2 \
&& chmod ugo+Xrw -R /etc/clickhouse-server /etc/clickhouse-client
# The last chmod is here to make the next one is No-op in docker official library Dockerfile
# NOTE (strtgbb): Removed install methods other than direct URL install to tidy the Dockerfile

# post install
# we need to allow "others" access to clickhouse folder, because docker container
Expand Down
12 changes: 12 additions & 0 deletions docs/en/operations/server-configuration-parameters/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -3121,3 +3121,15 @@ Default value: "default"

**See Also**
- [Workload Scheduling](/docs/en/operations/workload-scheduling.md)

## max_authentication_methods_per_user {#max_authentication_methods_per_user}

The maximum number of authentication methods a user can be created with or altered to.
Changing this setting does not affect existing users. Create/alter authentication-related queries will fail if they exceed the limit specified in this setting.
Non authentication create/alter queries will succeed.

Type: UInt64

Default value: 100

Zero means unlimited
31 changes: 30 additions & 1 deletion docs/en/sql-reference/statements/alter/user.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ Syntax:
``` sql
ALTER USER [IF EXISTS] name1 [ON CLUSTER cluster_name1] [RENAME TO new_name1]
[, name2 [ON CLUSTER cluster_name2] [RENAME TO new_name2] ...]
[NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'}]
[NOT IDENTIFIED | IDENTIFIED | ADD IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'}]
[[ADD | DROP] HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[VALID UNTIL datetime]
[RESET AUTHENTICATION METHODS TO NEW]
[DEFAULT ROLE role [,...] | ALL | ALL EXCEPT role [,...] ]
[GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]
Expand Down Expand Up @@ -62,3 +63,31 @@ Allows the user with `john` account to grant his privileges to the user with `ja
``` sql
ALTER USER john GRANTEES jack;
```

Adds new authentication methods to the user while keeping the existing ones:

``` sql
ALTER USER user1 ADD IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'
```

Notes:
1. Older versions of ClickHouse might not support the syntax of multiple authentication methods. Therefore, if the ClickHouse server contains such users and is downgraded to a version that does not support it, such users will become unusable and some user related operations will be broken. In order to downgrade gracefully, one must set all users to contain a single authentication method prior to downgrading. Alternatively, if the server was downgraded without the proper procedure, the faulty users should be dropped.
2. `no_password` can not co-exist with other authentication methods for security reasons.
Because of that, it is not possible to `ADD` a `no_password` authentication method. The below query will throw an error:

``` sql
ALTER USER user1 ADD IDENTIFIED WITH no_password
```

If you want to drop authentication methods for a user and rely on `no_password`, you must specify in the below replacing form.

Reset authentication methods and adds the ones specified in the query (effect of leading IDENTIFIED without the ADD keyword):

``` sql
ALTER USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'
```

Reset authentication methods and keep the most recent added one:
``` sql
ALTER USER user1 RESET AUTHENTICATION METHODS TO NEW
```
12 changes: 12 additions & 0 deletions docs/en/sql-reference/statements/create/user.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1]
[NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'} | {WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa|...'} | {WITH http SERVER 'server_name' [SCHEME 'Basic']}]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[VALID UNTIL datetime]
[RESET AUTHENTICATION METHODS TO NEW]
[IN access_storage_type]
[DEFAULT ROLE role [,...]]
[DEFAULT DATABASE database | NONE]
Expand Down Expand Up @@ -144,6 +145,17 @@ In ClickHouse Cloud, by default, passwords must meet the following complexity re

The available password types are: `plaintext_password`, `sha256_password`, `double_sha1_password`.

7. Multiple authentication methods can be specified:

```sql
CREATE USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3''
```

Notes:
1. Older versions of ClickHouse might not support the syntax of multiple authentication methods. Therefore, if the ClickHouse server contains such users and is downgraded to a version that does not support it, such users will become unusable and some user related operations will be broken. In order to downgrade gracefully, one must set all users to contain a single authentication method prior to downgrading. Alternatively, if the server was downgraded without the proper procedure, the faulty users should be dropped.
2. `no_password` can not co-exist with other authentication methods for security reasons. Therefore, you can only specify
`no_password` if it is the only authentication method in the query.

## User Host

User host is a host from which a connection to ClickHouse server could be established. The host can be specified in the `HOST` query section in the following ways:
Expand Down
2 changes: 1 addition & 1 deletion programs/server/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1612,7 +1612,7 @@
<anonymize>false</anonymize>
<!-- Default endpoint should be changed to different Sentry DSN only if you have -->
<!-- some in-house engineers or hired consultants who're going to debug ClickHouse issues for you -->
<endpoint>https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277</endpoint>
<endpoint></endpoint>
<!-- Send LOGICAL_ERRORs as well (default: false) -->
<send_logical_errors>false</send_logical_errors>
</send_crash_reports>
Expand Down
2 changes: 1 addition & 1 deletion programs/server/config.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -924,6 +924,6 @@ send_crash_reports:
anonymize: false
# Default endpoint should be changed to different Sentry DSN only if you have
# some in-house engineers or hired consultants who're going to debug ClickHouse issues for you
endpoint: 'https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277'
endpoint: ''
# Uncomment to disable ClickHouse internal DNS caching.
# disable_internal_dns_cache: 1
2 changes: 1 addition & 1 deletion src/Access/AccessEntityIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ AccessEntityPtr deserializeAccessEntityImpl(const String & definition)
if (res)
throw Exception(ErrorCodes::INCORRECT_ACCESS_ENTITY_DEFINITION, "Two access entities attached in the same file");
res = user = std::make_unique<User>();
InterpreterCreateUserQuery::updateUserFromQuery(*user, *create_user_query, /* allow_no_password = */ true, /* allow_plaintext_password = */ true);
InterpreterCreateUserQuery::updateUserFromQuery(*user, *create_user_query, /* allow_no_password = */ true, /* allow_plaintext_password = */ true, /* max_number_of_authentication_methods = zero is unlimited*/ 0);
}
else if (auto * create_role_query = query->as<ASTCreateRoleQuery>())
{
Expand Down
Loading
Loading