Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - SQL 用法 » 存储过程、触发器、批处理和用户定义的函数 » 过程 » 将过程与函数设置为使用所有者或调用者特权进行运行

 

以调用者或定义者身份运行 16.0 之前版本的系统过程

16.0 之前版本的软件中存在一些用于在数据库中执行特许任务(如变更表)的系统过程,这些系统过程可以使用调用者或定义者(所有者)的特权进行运行。创建或初始化数据库时,可指定希望这些特殊系统过程使用其所有者(定义者)还是使用其调用者的特权进行执行。

如果将数据库配置为以定义者模式运行这些系统过程,则调用者不需要任何附加特权,因为这些过程将使用定义者(通常是 dbo 或 SYS 角色)的特权进行运行,而定义者已经拥有所需的特权。

如果将数据库配置为以调用者模式运行,则调用者需要拥有过程文档中所注明的特权。调用者还需要具备该过程的 EXECUTE 特权,但其通过成为 PUBLIC 的成员来继承该特权。

注意

用户定义 过程的缺省行为不受调用者/定义者模式影响。也就是说,如果用户定义过程的定义未指定调用者或定义者,则过程将使用定义者的特权进行运行。

使用以下方法之一来控制这些系统过程在数据库创建时或升级时的运行方式:

  • CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER 语句   指定 CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER OFF 意味着数据库服务器强制执行调用者的特权。这是新数据库的缺省行为。

    指定 CREATE DATABASE...SYSTEM PROCEDURE AS DEFINER ON 意味着数据库服务器强制执行定义者(所有者)的特权。这是 16.0 之前版本的数据库的缺省行为。

  • ALTER DATABASE UPGRADE...SYSTEM PROCEDURE AS DEFINER 语句   此子句的行为方式与 CREATE DATABASE 语句相同。如果不指定该子句,则将保留正在升级的数据库的现有行为。例如,在升级 16.0 之前版本的数据库时,缺省行为是使用定义者的特权进行执行。

  • -pd 选项,初始化实用程序 (dbinit)   在创建数据库时指定 -pd 选项将导致数据库服务器在运行这些系统过程时强制执行定义者的特权。如果不指定 -pd,则缺省行为是强制执行调用者的特权。

  • -pd 选项,升级实用程序 (dbupgrad)   在升级数据库时指定 -pd Y 将导致数据库服务器在运行这些系统过程时强制执行定义者的特权。

    指定 -pd N 将导致数据库服务器在运行这些系统过程时强制执行调用者的特权。

    如果不指定此选项,则将保留正在升级的数据库的现有行为。

注意

PUBLIC 系统角色已被授予所有系统过程的 EXECUTE 特权。缺省情况下会为新创建的用户授予 PUBLIC 角色,所以用户已经拥有系统过程的 EXECUTE 特权。

用户定义函数和过程的缺省行为不受调用者/定义者决定影响。也就是说,即使选择以调用者身份运行这些系统过程,用户定义过程的缺省设置仍是定义者。

 受调用者/定义者设置影响的过程的列表
 无论调用者/定义者设置如何,始终使用调用者特权进行运行的过程的列表
 另请参见

确定数据库所使用的安全模型 (SQL)