0

如何将所有现有 Sybase 用户的权限复制到新帐户?例如,有些表只有 select 权限,许多 proc 有执行权限等。原始帐户对数百个数据库对象中的几十个表和几个存储的 proc 的访问权限有限。

4

1 回答 1

1

如果您要多次执行此操作:创建一个角色,授予该角色权限,并将用户分配给该角色。

如果在数据库中审核谁在做什么并不重要:将新用户别名为数据库中的旧用户

sp_dropuser 'NEW_USERNAME'
go
sp_addalias 'NEW_USERNAME', 'EXISTING_USERNAME'
go

sp_helprotect EXISTING_USERNAME 将打印出该用户的权限列表。您可以捕获该输出并使用它将这些权限添加到新帐户。

以下步骤需要编辑系统表,请注意避免破坏您的系统。确保您有良好的备份。*

用户权限存储在 sysprotects 表中。理论上,您应该能够:

  1. 创建新用户登录
  2. 将用户添加到数据库
  3. 添加任何角色或别名
  4. 从 sysprotects 中选择权限,其中 uid = EXISTING_USER_ID 进入临时表。
  5. 更新临时表并将 uid 从 EXISTING_USER 更改为 NEW_USER 的 uid
  6. 使用 sp_configure 允许更新系统表
  7. 使用更新的临时表将记录插入 sysprotects
  8. 使用 sp_configure 禁止更新系统表

免责声明 请在生产服务器上尝试之前测试它,因为我没有测试它来验证它是否有效。

于 2012-07-17T15:58:01.080 回答