clickhouse version: 22.3.6.5

users.yaml :
```
  public_ro:
    password: "test"
    networks:
      ip: '::/0'
    profile: readonly
    quota: default
    allow_databases:
      - database: public
```
exec result: 
```
clickhouse-0-0.clickhouse-headless.default.svc.cluster.local :) create table test(test Uint32) engine=memory();

CREATE TABLE test
(
    `test` Uint32
)
ENGINE = memory

Query id: c976c324-efa1-418d-a6de-b615a9f8947d


0 rows in set. Elapsed: 0.001 sec. 

Received exception from server (version 22.3.6):
Code: 164. DB::Exception: Received from localhost:9000. DB::Exception: public_ro: Cannot execute query in readonly mode. (READONLY)

clickhouse-0-0.clickhouse-headless.default.svc.cluster.local :) create function test as a -> a*2;

CREATE FUNCTION test AS a -> (a * 2)

Query id: b5b59b1c-5209-4de6-b521-9d6b50f5ce33

Ok.

0 rows in set. Elapsed: 0.003 sec. 

clickhouse-0-0.clickhouse-headless.default.svc.cluster.local :) drop function test;

DROP FUNCTION test

Query id: ee5f2061-4ff0-4627-bd3f-c7052406d484

Ok.

0 rows in set. Elapsed: 0.001 sec. 

```
{
    if (!std::size(role_ids) || is_full_access)
        return true;
    auto show_error = [this](const String & msg, int error_code [[maybe_unused]])
    {
        UNUSED(this);
        if constexpr (throw_if_denied)
            throw Exception(getUserName() + ": " + msg, error_code);
    };
    if (!getUser())
    {
        show_error("User has been dropped", ErrorCodes::UNKNOWN_USER);
        return false;
    }
    if (isGranted(AccessType::ROLE_ADMIN))
        return true;
    auto info = getRolesInfo();
    size_t i = 0;
    for (auto it = std::begin(role_ids); it != std::end(role_ids); ++it, ++i)
    {
        const UUID & role_id = *it;
        if (info->enabled_roles_with_admin_option.count(role_id))
            continue;
        if (throw_if_denied)
        {
            auto role_name = get_name_function(role_id, i);
            if (!role_name)
                role_name = "ID {" + toString(role_id) + "}";
            if (info->enabled_roles.count(role_id))