管理连接

列出所有网络连接

管理员可以查看数据库实例内的所有网络连接。或者,当前用户也可以查看其拥有的所有网络连接。

dbms.listConnections 过程会列出所有已配置连接器(包括 Bolt、HTTP 和 HTTPS)中已接受的网络连接。某些列出的连接可能从未执行过身份验证。例如,针对 Neo4j Browser 端点的 HTTP GET 请求会获取静态资源,无需进行身份验证。然而,使用 Neo4j Browser 建立的连接需要用户提供凭据并执行身份验证。有关 Neo4j Browser 连接的更多信息,请参阅 Neo4j Browser 文档

语法

CALL dbms.listConnections()

表 1. 从数据库检索的数据
名称 类型 描述

连接 ID (connectionId)

字符串

这是网络连接的 ID。

connectTime

字符串

这是连接启动的时间。

connector

字符串

接受该连接的连接器名称。

username

字符串

这是发起连接的用户的用户名。如果事务是使用嵌入式 API 发出的,则此字段将为 null。如果连接未执行身份验证,它也可能为 null。

userAgent

字符串

所连接软件的名称。对于 HTTP 和 HTTPS 连接,此信息从 User-Agent 请求头中提取。对于 Bolt 连接,用户代理(user agent)是原生可用的,并在初始化消息中提供。

serverAddress

字符串

此连接所连接的服务器地址。

客户端地址 (clientAddress)

字符串

该连接的客户端地址。

表 2. 默认 userAgent 字符串格式
Neo4j 客户端代理 userAgent 默认字符串格式 示例

Cypher Shell

"neo4j-cypher-shell/v${version}"

"neo4j-cypher-shell/v4.3.0"

Neo4j Browser

"neo4j-browser/v${version}"

"neo4j-browser/v4.3.0"

Neo4j Bloom

"neo4j-bloom/v${version}"

"neo4j-bloom/v1.7.0"

Neo4j Java 驱动程序

"neo4j-java/x.y.z"

"neo4j-java/1.6.3"

Neo4j .Net 驱动程序

"neo4j-dotnet/x.y"

"neo4j-dotnet/4.3"

Neo4j Go 驱动程序

"Go Driver/x.y"

"Go Driver/4.3"

Neo4j Python 驱动程序

"neo4j-python/x.y Python/x.y.z-a-b (<operating-system>)"

"neo4j-python/4.3 Python/3.7.6 (Linux)"

Neo4j JavaScript 驱动程序

"neo4j-javascript/x.y.z"

"neo4j-javascript/4.3.0"

示例 1. 列出所有网络连接

以下示例显示用户“alwood”正在使用 Java 驱动程序和 Firefox 网络浏览器进行连接。该过程调用会产生有关连接的具体信息,即 connectionIdconnectTimeconnectorusernameuserAgentclientAddress

CALL dbms.listConnections() YIELD connectionId, connectTime, connector, username, userAgent, clientAddress
╒══════════════╤══════════════════════════╤═══════════╤══════════╤════════════════════════════════════════════════════════════════════════════════════╤═════════════════╤═════════╕
│"connectionId"│"connectTime"             │"connector"│"username"│"userAgent"                                                                         │"clientAddress"  │"status" │
╞══════════════╪══════════════════════════╪═══════════╪══════════╪════════════════════════════════════════════════════════════════════════════════════╪═════════════════╪═════════╡
│"bolt-21"     │"2018-10-10T12:11:42.276Z"│"bolt"     │"alwood"  │"neo4j-java/1.6.3"                                                                  │"127.0.0.1:53929"│"Running"│
├──────────────┼──────────────────────────┼───────────┼──────────┼────────────────────────────────────────────────────────────────────────────────────┼─────────────────┼─────────┤
│"http-11"     │"2018-10-10T12:37:19.014Z"│"http"     │null      │"Mozilla/5.0 (Macintosh; Intel macOS 10.13; rv:62.0) Gecko/20100101 Firefox/62.0"│"127.0.0.1:54118"│"Running"│
└──────────────┴──────────────────────────┴───────────┴──────────┴────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴─────────┘
2 rows

终止多个网络连接

管理员能够终止实例内给定 ID 列表中的所有网络连接。或者,当前用户也可以终止其拥有的给定 ID 列表中的所有网络连接。

语法

CALL dbms.killConnections(connectionIds)

参数

名称 类型 描述

ID (ids)

List<String>

这是要终止的所有连接的 ID 列表。

返回

名称 类型 描述

连接 ID (connectionId)

字符串

这是已终止连接的 ID。

username

字符串

这是发起(现已终止)连接的用户的用户名。

message

字符串

一条说明连接是否被成功找到的消息。

注意事项

Bolt 连接是有状态的。终止 Bolt 连接会导致正在进行的查询/事务被终止。

终止 HTTP/HTTPS 连接可以终止正在进行的 HTTP/HTTPS 请求。

示例 2. 终止多个网络连接

以下示例显示管理员已终止了 ID 为“bolt-37”和“https-11”的连接,这些连接分别由用户“joesmith”和“annebrown”启动。管理员还尝试终止 ID 为“http-42”的连接,但该连接不存在。

CALL dbms.killConnections(['bolt-37', 'https-11', 'http-42'])
╒══════════════╤═══════════╤══════════════════════════════════╕
│"connectionId"│"username" │"message"                         │
╞══════════════╪═══════════╪══════════════════════════════════╡
│"bolt-37"     │"joesmith" │"Connection found"                │
├──────────────┼───────────┼──────────────────────────────────┤
│"https-11"    │"annebrown"│"Connection found"                │
├──────────────┼───────────┼──────────────────────────────────┤
│"http-42"     │"n/a"      │"No connection found with this id"│
└──────────────┴───────────┴──────────────────────────────────┘
3 rows

终止单个网络连接

管理员能够在实例内终止具有给定 ID 的任何网络连接。或者,当前用户可以终止其拥有的具有给定 ID 的网络连接。

语法

CALL dbms.killConnection(connectionId)

参数

名称 类型 描述

id

字符串

这是要终止的连接的 ID。

返回

名称 类型 描述

连接 ID (connectionId)

字符串

这是已终止连接的 ID。

username

字符串

这是发起(现已终止)连接的用户的用户名。

message

字符串

一条说明连接是否被成功找到的消息。

注意事项

Bolt 连接是有状态的。终止 Bolt 连接会导致正在进行的查询/事务被终止。

终止 HTTP/HTTPS 连接可以终止正在进行的 HTTP/HTTPS 请求。

示例 3. 终止单个网络连接

以下示例显示用户“joesmith”已终止了他 ID 为“bolt-4321”的连接。

CALL dbms.killConnection('bolt-4321')
╒══════════════╤═══════════╤══════════════════╕
│"connectionId"│"username" │"message"         │
╞══════════════╪═══════════╪══════════════════╡
│"bolt-4321"   │"joesmith" │"Connection found"│
└──────────────┴───────────┴──────────────────┘
1 row

以下示例显示了尝试终止不存在 ID 的连接时的输出。

CALL dbms.killConnection('bolt-987')
╒══════════════╤═══════════╤══════════════════════════════════╕
│"connectionId"│"username" │"message"                         │
╞══════════════╪═══════════╪══════════════════════════════════╡
│"bolt-987"    │"n/a"      │"No connection found with this id"│
└──────────────┴───────────┴──────────────────────────────────┘
1 row