Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
0440e031
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0440e031
编写于
1月 14, 2017
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Translated comments [#CLICKHOUSE-3].
上级
4fe2a443
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
16 deletion
+16
-16
dbms/include/DB/Interpreters/Users.h
dbms/include/DB/Interpreters/Users.h
+16
-16
未找到文件。
dbms/include/DB/Interpreters/Users.h
浏览文件 @
0440e031
...
...
@@ -39,7 +39,7 @@ namespace ErrorCodes
}
///
Позволяет проверить соответствие адреса шаблону
.
///
Allow to check that address matches a pattern
.
class
IAddressPattern
{
public:
...
...
@@ -56,13 +56,13 @@ public:
};
/// IP-
адрес или маска подсети. Например, 213.180.204.3 или 10.0.0.1/8 или 2a02:6b8::3 или
2a02:6b8::3/64.
/// IP-
address or subnet mask. Example: 213.180.204.3 or 10.0.0.1/8 or 2a02:6b8::3 or
2a02:6b8::3/64.
class
IPAddressPattern
:
public
IAddressPattern
{
private:
///
Адрес маски. Всегда переводится в
IPv6.
///
Address of mask. Always transformed to
IPv6.
Poco
::
Net
::
IPAddress
mask_address
;
///
Количество бит в маске
.
///
Number of bits in mask
.
UInt8
prefix_bits
;
public:
...
...
@@ -115,7 +115,7 @@ private:
};
///
Проверяет соответствие адреса одному из адресов хоста
.
///
Check that address equals to one of hostname addresses
.
class
HostExactPattern
:
public
IAddressPattern
{
private:
...
...
@@ -125,7 +125,7 @@ private:
{
Poco
::
Net
::
IPAddress
addr_v6
=
toIPv6
(
addr
);
///
Резолвим вручную, потому что в Poco не используется флаг AI_ALL, а он важен
.
///
Resolve by hand, because Poco don't use AI_ALL flag but we need it
.
addrinfo
*
ai
=
nullptr
;
addrinfo
hints
;
...
...
@@ -184,7 +184,7 @@ public:
};
///
Проверяет соответствие PTR-записи для адреса регекспу (и дополнительно проверяет, что PTR-запись резолвится обратно в адрес клиента
).
///
Check that PTR record for address match the regexp (and in addition, check that PTR record is resolved back to client address
).
class
HostRegexpPattern
:
public
IAddressPattern
{
private:
...
...
@@ -194,7 +194,7 @@ private:
{
Poco
::
Net
::
SocketAddress
sock_addr
(
addr
,
0
);
///
Резолвим вручную, потому что в Poco нет такой функциональности
.
///
Resolve by hand, because Poco library doesn't have such functionality
.
char
domain
[
1024
];
int
gai_errno
=
getnameinfo
(
sock_addr
.
addr
(),
sock_addr
.
length
(),
domain
,
sizeof
(
domain
),
nullptr
,
0
,
NI_NAMEREQD
);
if
(
0
!=
gai_errno
)
...
...
@@ -233,7 +233,7 @@ public:
{
for
(
size_t
i
=
0
,
size
=
patterns
.
size
();
i
<
size
;
++
i
)
{
///
если хост не резолвится, то пропустим его и попробуем другой
///
If host cannot be resolved, skip it and try next.
try
{
if
(
patterns
[
i
]
->
contains
(
addr
))
...
...
@@ -281,13 +281,13 @@ public:
};
/**
Пользователь и
ACL.
/**
User and
ACL.
*/
struct
User
{
String
name
;
///
Требуемый пароль. Может храниться либо в открытом виде, либо в виде
SHA256.
///
Required password. Could be stored in plaintext or in
SHA256.
String
password
;
String
password_sha256_hex
;
...
...
@@ -296,7 +296,7 @@ struct User
AddressPatterns
addresses
;
///
Список разрешённых баз данных
.
///
List of allowed databases
.
using
DatabaseSet
=
std
::
unordered_set
<
std
::
string
>
;
DatabaseSet
databases
;
...
...
@@ -328,7 +328,7 @@ struct User
addresses
.
addFromConfig
(
config_elem
+
".networks"
,
config
);
///
Заполнить список разрешённых баз данных
.
///
Fill list of allowed databases
.
const
auto
config_sub_elem
=
config_elem
+
".allow_databases"
;
if
(
config
.
has
(
config_sub_elem
))
{
...
...
@@ -344,12 +344,12 @@ struct User
}
}
///
Для вставки в контейнер
.
///
For insertion to containers
.
User
()
{}
};
///
Известные пользователи
.
///
Known users
.
class
Users
{
private:
...
...
@@ -415,7 +415,7 @@ public:
return
it
->
second
;
}
///
Проверить, имеет ли заданный клиент доступ к заданной базе данных
.
///
Check if the user has access to the database
.
bool
isAllowedDatabase
(
const
std
::
string
&
user_name
,
const
std
::
string
&
database_name
)
const
{
auto
it
=
cont
.
find
(
user_name
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录