USER_NAME 列在 HANA DB USERS table 中是否唯一?

Is USER_NAME column unique in HANA DB USERS table?

USER_NAME field/column 在 HANA 数据库用户 table 中是唯一的吗?我只看到 USER_ID 值中的数字。

就像 SAP USR02 中的 BNAME table,我想知道 HANA DB USERS 中的唯一(或等效于 bname)值字段是什么 table。

您可以在下面的 SAP 门户 link 上查找架构信息:

https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.01/en-US/21026099751910148e0cdbddc75652b8.html

虽然它不会告诉你某个特定列是否是主键或是否需要唯一,但你可以将这些信息与来自以下系统视图的数据结合起来并获得你想要的信息。

https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.05/en-US/210197377519101481cfb213f0b84848.html

我在下面的屏幕截图中突出显示了您需要的表系统视图中的列

Amandeep Modgil 的回答没有错,但没有完全回答问题。

当然,文档中明确指出 SAP HANA 中的用户名需要是唯一的。但是,它并没有具体说明这是否或如何enforced/guaranteed。

找出类似问题的“数据库开发方式”是检查 HANA 用来存储用户的 table 结构。

查看 PUBLIC.USERS 对象,我们意识到:这不是 table 而是 view

视图没有分配任何约束,因此任何 primary keyunique 约束必须使用以下之一实现table 被视图引用。

下一步是查看视图的源代码。在 SAP HANA Studio 中,只需在 SQL 编辑器中标记视图的名称,然后从上下文菜单中选择 “显示定义”

对于 PUBLIC.USERS 这将打开两个(!)新的 windows:

  • public 同义词(实际上没有 PUBLIC 模式,只有同义词)USERS
  • 还有一个用于视图 SYS.USERS

这个 SYS 模式是 SAP HANA 系统对象实现的地方,所以在这里找到 USERS 的视图也就不足为奇了。

在我的 HANA Express 2.00.045 系统中,视图的源代码令人惊讶地以

开头
CREATE **ROW TABLE** "SYS"."USERS" ( "USER_NAME",
     "USER_ID",
     "USERGROUP_NAME" ...

这至少 很奇怪 ,我怀疑这可能是一个错误,因为该对象的所有其他元数据条目都清楚地表明这实际上是一个视图。

但我离题了...

要回答的问题是:USER_NAME 的唯一性在哪里强制执行? 向下滚动 SYS.USERS-视图的最后一个主要 FROM-子句指向 table:SYS.P_USERS_.

名称中尾随的下划线表示这是一个 内部 HANA 对象,任何用户或应用程序都不应直接使用。但这并不妨碍我们审视它。不过,为此需要适当的特权。 “普通”应用程序用户帐户可能无法直接查看此 table 的定义。在这种情况下,我只是使用 SYSTEM 用户。

无论如何,我们使用与之前相同的技术:在SQL编辑器中标记SYS.P_USERS_ table,选择“显示定义”,我们得到:[的定义=113=] 拥有 SAP HANA 中的用户帐户。

前三列定义如下:

Name                    SQL Data Type   Dimension   Column Store Data Type  Key Not Null
OID                     BIGINT                      FIXED                       X
NAME                    NVARCHAR        256         STRING
LAST_SUCCESSFUL_CONNECT TIMESTAMP                   LONGDATE ...

请注意如何在此 table 上定义 no 主键以及如何只有 OID 具有 NOT NULL 约束?

显然,NAME 的唯一性不受 table 约束的保证。 那还能是什么呢?

让我们切换到 table 定义的 Indexes 选项卡,我们发现:

  • IDX_P_USERS_OID,索引列:"OID" ASC
  • IDX_P_USERS_NAME,索引列:"NAME" ASC

AND 对于这两个索引,设置了 Unique-flag

我们有它: OID(显示为 USER_ID)和 NAME(显示为 USER_NAME)在 SAP HANA 中都是唯一的,由内部 table 上的唯一索引强制执行这些用户帐户条目。