在 ASE Sybase 15.7 中更改存储过程
Altering Stored Procedures in ASE Sybase 15.7
我是 ASE Sybase 15.7 的新手,但在其他 RDBMS 系统方面有一些背景知识。所以我假设在 ASE Sybase 15.7 中会有一个等价于存储过程的 CREATE OR REPLACE。
但我似乎没有看到任何方法可以做到这一点。我问过的大多数人建议删除并使用较新版本的存储过程创建,但这给我带来了管理存储过程权限的挑战,这些权限因环境而异,具体取决于每个环境中的用户。
所以我的问题如下:
假设我有这样一个存储过程:
ENV1
CREATE Procedure test (
as
begin
SELECT getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
ENV2 有:
CREATE Procedure test (
as
begin
SELECT getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
grant execute on test to group3
go
我想更新这个存储过程给我 2 个日期而不是 1 个所以新过程应该是
环境 1:
CREATE Procedure test (
as
begin
SELECT getdate(), getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
环境 2:
CREATE Procedure test (
as
begin
SELECT getdate(), getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
grant execute on test to group3
go
以上是一个非常简单的例子。有没有一种方法可以部署更改以仅修改保留权限的存储过程主体?
CREATE 或 REPLACE 和 ALTER PROCEDURE 似乎不起作用,删除和创建存储过程意味着每个环境都有额外的逻辑来确定要授予的权限。
考虑到我们有 20 多个不同的用户环境,有没有办法以最佳方式进行这种部署?
谢谢!
虽然 ASE
支持 create or replace
,但仅适用于 ASE 16.x
(即,您需要升级到 ASE 16.x
)。
假设您要构建某种脚本解决方案,我建议您查看 ddlgen utility 以帮助提取存储过程的当前权限。
使用 ddlgen
为存储过程提取 DDL 的一个(非常简单的)示例:
$ ddlgen -SmyASE -Umylogin -Pmypassword -TP -Nsybsystemprocs.dbo.sp_help -Osp_help.ddl.out
$ cat sp_help.ddl.out
-- Sybase Adaptive Server Enterprise DDL Generator Utility/1 ...snip...
...snip...
use sybsystemprocs
go
...snip...
create procedure sp_help
...snip...
Grant Execute on dbo.sp_help to public Granted by dbo
go
sp_procxmode 'sp_help', anymode
go
从这里您可以 grep
出所需的 grant
、revoke
and/or sp_procxmode
行,一旦您完成(重新)执行dropped/created 替换存储过程。
如果您无法访问 ddlgen
(我知道它包含在 ASE
安装软件中,但不记得它是否在 SDK
/客户端软件中提供安装)你有几个选择:
- 让 DBA 运行 为您执行
ddlgen
命令并为您提供结果(是的,我相信 DBA 会喜欢这个想法)
- 在您的 'client' 机器上安装
ddlgen
(例如,安装 ASE
安装包;或从 ASE
安装中复制所需的文件 - 更容易说起来难,在升级软件时会是一个 PITA)
- 运行
sp_helprotect <proc_name>
(和 sp_procxmode <proc_name>
)并解析所需 grant
、revoke
and/or [=19= 的输出] 命令
还有 'run-and-parse sp_helprotect/sp_procxmode
output' 上的一个替代方案...查看这些过程的源代码并滚动您自己的 SQL 代码以一种您更容易处理的格式提取所需的数据手柄。
我是 ASE Sybase 15.7 的新手,但在其他 RDBMS 系统方面有一些背景知识。所以我假设在 ASE Sybase 15.7 中会有一个等价于存储过程的 CREATE OR REPLACE。
但我似乎没有看到任何方法可以做到这一点。我问过的大多数人建议删除并使用较新版本的存储过程创建,但这给我带来了管理存储过程权限的挑战,这些权限因环境而异,具体取决于每个环境中的用户。
所以我的问题如下:
假设我有这样一个存储过程:
ENV1
CREATE Procedure test (
as
begin
SELECT getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
ENV2 有:
CREATE Procedure test (
as
begin
SELECT getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
grant execute on test to group3
go
我想更新这个存储过程给我 2 个日期而不是 1 个所以新过程应该是
环境 1:
CREATE Procedure test (
as
begin
SELECT getdate(), getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
环境 2:
CREATE Procedure test (
as
begin
SELECT getdate(), getdate()
end
grant execute on test to group1
go
grant execute on test to group2
go
grant execute on test to group3
go
以上是一个非常简单的例子。有没有一种方法可以部署更改以仅修改保留权限的存储过程主体?
CREATE 或 REPLACE 和 ALTER PROCEDURE 似乎不起作用,删除和创建存储过程意味着每个环境都有额外的逻辑来确定要授予的权限。
考虑到我们有 20 多个不同的用户环境,有没有办法以最佳方式进行这种部署?
谢谢!
虽然 ASE
支持 create or replace
,但仅适用于 ASE 16.x
(即,您需要升级到 ASE 16.x
)。
假设您要构建某种脚本解决方案,我建议您查看 ddlgen utility 以帮助提取存储过程的当前权限。
使用 ddlgen
为存储过程提取 DDL 的一个(非常简单的)示例:
$ ddlgen -SmyASE -Umylogin -Pmypassword -TP -Nsybsystemprocs.dbo.sp_help -Osp_help.ddl.out
$ cat sp_help.ddl.out
-- Sybase Adaptive Server Enterprise DDL Generator Utility/1 ...snip...
...snip...
use sybsystemprocs
go
...snip...
create procedure sp_help
...snip...
Grant Execute on dbo.sp_help to public Granted by dbo
go
sp_procxmode 'sp_help', anymode
go
从这里您可以 grep
出所需的 grant
、revoke
and/or sp_procxmode
行,一旦您完成(重新)执行dropped/created 替换存储过程。
如果您无法访问 ddlgen
(我知道它包含在 ASE
安装软件中,但不记得它是否在 SDK
/客户端软件中提供安装)你有几个选择:
- 让 DBA 运行 为您执行
ddlgen
命令并为您提供结果(是的,我相信 DBA 会喜欢这个想法) - 在您的 'client' 机器上安装
ddlgen
(例如,安装ASE
安装包;或从ASE
安装中复制所需的文件 - 更容易说起来难,在升级软件时会是一个 PITA) - 运行
sp_helprotect <proc_name>
(和sp_procxmode <proc_name>
)并解析所需grant
、revoke
and/or [=19= 的输出] 命令
还有 'run-and-parse sp_helprotect/sp_procxmode
output' 上的一个替代方案...查看这些过程的源代码并滚动您自己的 SQL 代码以一种您更容易处理的格式提取所需的数据手柄。