远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

访问规则


若要使用行级访问控制功能,请将 access 选项添加到现有的 create rule

语法中。访问规则将对任何可被查看或修改的行施加限制。

访问规则类似于域规则,域规则允许表所有者控制用户可以在某个列中 插入或更新的值。域规则对添加的数据施加限制,对 update insert 命 令起作用。


访问规则对检索的数据施加限制,对 select, update delete 操作起作用。 Adaptive Server 将对查询所读取的所有列强制执行访问规则,即使 select 列表中不包括这些列。也就是说,在给定的查询中, Adaptive Server 将对 更新的表强制执行域规则,并对所读取的所有表强制执行访问规则。

例如:

insert into orders_table select * from old_orders_table

在此查询中,如果 orders_table 上有域规则, old_orders_table 上有访问 规则,则 Adaptive Server 将对 orders_table 强制执行域规则 (原因是 更新了该表),而对 old_orders_table 强制执行访问规则 (原因是读取 了该表)。

使用访问规则类似于使用视图或带有 where 子句的即席查询。查询是在 附加访问规则之后才进行编译和优化的,因此它不会导致性能下降。访 问规则提供表数据的虚拟视图,视图的内容取决于绑定到列的具体访问 规则。

访问规则可以绑定到用 sp_addtype 定义的用户定义数据类型。 Adaptive Server 在用户表上强制执行访问规则,这样,表所有者或数据库所有者 在标准化方案中就无需执行将访问规则绑定到列的维护任务。例如,您 可以创建一个名为 username 的用户定义类型,其基类型为 varchar(30), 并为该类型绑定一个访问规则。 Adaptive Server 将对应用程序中任何具 有 username 类型的列的表强制执行访问规则。

205 页上的 “访问规则作为用户定义的 Java 函数” 208 页上 的 “使用应用程序环境功能”所述,应用程序开发人员可以使用 Java 和应用程序环境编写灵活的访问规则。


访问规则的语法


create rule 语法中使用 access 参数创建访问规则。

create [or|and] access rule (access_rule_name) as (condition)


创建带有访问规则的示例表


本节说明创建表并将访问规则绑定到该表的过程。

创建表 表所有者创建并填充表 T username char(30)title char(30)

classified_data char(1024) ):

AA, "Administrative Assistant","Memo to President" AA, "Administrative Assistant","Tracking Stock Movements"


VP1, "Vice President", "Meeting Schedule" VP2, "Vice President", "Meeting Schedule"

创建并绑定访问规则 表所有者创建访问规则 uname_acc_rule 并将其绑定到表 T 上的

username 列。

create access rule uname_acc_rule as @username = suser_name()

-----------

sp_bindrule uname_acc_rule, "T.username"

查询表 发出以下查询后:

select * from T

Adaptive Server 处理绑定到表 T username 列的访问规则并将其附加到 查询树。然后优化查询树,并生成和执行查询计划,就好像用户执行带 有访问规则中给定的过滤器子句一样。也就是说, Adaptive Server 按如 下示例附加访问规则并执行查询:

select * from T where T.username = suser_name().

服务器强制执行条件 where T.username = suser_name()。用户不能绕过访 问规则。

管理助手执行选择查询的结果是:

AA, "Administrative Assistant","Memo to President" AA, "Administrative Assistant","Tracking Stock Movements"

删除访问规则 在删除访问规则之前,必须使用 sp_unbindrule 取消它与任何列或数据类 型的绑定,如下面的示例所示:

sp_unbindrule "T.username", NULL, "all"

sp_unbindrule 可取消绑定缺省情况下附加到列上的任何域规则。 在取消绑定规则之后,可以将其删除:

drop rule "rule_name"

例如:

drop rule "T.username"


扩展访问规则的语法


每个访问规则绑定到一个列,但一个表中可以具有多个访问规则。 create rule 提供 AND OR 参数来处理多个访问规则的计算。若要创建 AND 访问规则和 OR 访问规则,请使用扩展访问规则语法:


AND 访问规则:

create and access rule rule_name

OR 访问规则

create or access rule rule_name as

可以将 AND 访问规则和 OR 访问规则绑定到列或用户定义数据类型。虽 然每个列只能绑定一个访问规则,但通过扩展访问规则语法,可以在表 中绑定多个访问规则。当访问表时,这些访问规则就会生效,缺省情况 下,先执行绑定的 AND 规则,然后执行 OR 访问规则。

如果在表中绑定多个访问规则但没有定义 AND OR 访问,则缺省访问 规则是 AND

如果表中某行上只有一个访问规则,并且这一规则被定义为 OR 访问规 则,则它与 AND 访问规则的行为相同。


使用访问规则和扩展访问规则

创建访问规则 以下步骤创建访问规则:

create access rule empid1_access as @empid = 1


create access rule deptno1_access as @deptid = 2

以下步骤创建 OR 访问规则:

create or access rule name1_access as @name = "smith"

create or access rule phone_access as @phone = "9999"

创建表 此步骤创建一个测试表:

create table testtab1 (empno int, deptno int,name char(10), phone char(4))

将规则绑定到表 以下步骤将访问规则绑定到测试表中的列:

sp_bindrule empid1_access, "testtab1.empno"

/*Rule bound to table column.*/ (return status = 0)

sp_bindrule deptno1_access,"testtab1.deptno"

/*Rule bound to table column.*/ (return status = 0)


sp_bindrule name1_access,"testtab1.name"

/*Rule bound to table column.*/ (return status = 0)

sp_bindrule phone_access,"testtab1.phone"

/*Rule bound to table column.*/ (return status = 0)

将数据插入表中 以下步骤将值插入测试表中:

insert testtab1 values (1,1,"smith","3245") (1 row affected)

insert testtab1 values(2,1,"jones","0283") (1 row affected)

insert testtab1 values(1,2,"smith","8282")(1 row affected)

insert testtab1 values(2,2,"smith","9999") (1 row affected)


访问规则示例


以下示例说明访问规则如何返回包含访问规则限制的信息的特定行。

示例 1. 返回两行中的信息:

/* return rows when empno = 1 and deptno = 2 and ( name = "smith" or phone = "9999" )

*/


select * from testtab1

empno deptno name phone

------------ ----------- ---------- -----

1 2 smith 8282

1 2 jones 9999


(2 rows affected)


/* unbind access rule from specific column */ sp_unbindrule "testtab1.empno",NULL,"accessrule"

/*Rule unbound from table column.*/


(return status = 0)

示例 2. 返回四行中的信息:


/* return rows when deptno = 2 and ( name = "smith" or phone = "9999" )*/

select * from testtab1

empno deptno name phone

-----------

-----------

----------

-----

1

2

smith

8282

2

2

smith

9999

3

2

smith

8888

1

2

jones

9999

(4 rows affected)


/* unbind all deptno rules from specific column */ sp_unbindrule "testtab1.deptno",NULL,"all"

/*Rule unbound from table column.*/


(return status = 0)

示例 3. 返回六行中的信息:

/* return the rows when name = "smith" or phone = "9999"

*/


select * from testtab1

empno

deptno

name

phone

-----------

-----------

----------

-----

1

1

smith

3245

1

2

smith

8282

2

2

smith

9999

3

2

smith

8888

1

2

jones

9999

2

3

jones

9999


访问规则和 alter table 命令

如果表所有者使用 alter table 命令,则在执行此命令期间, Adaptive Server 将禁用访问规则并在命令完成后启用它们。在执行 alter table 命令 期间,禁用访问规则是为了避免过滤表数据。


访问规则和 bcp


使用 bcp 从表中向外复制数据时, Adaptive Server 将强制执行访问规 则。由于对表具有选择权限的任何用户都可使用 bcp,因此 Adaptive Server 不能像对 alter table 那样禁用访问规则。


为了安全目的,批量向外复制期间,数据库所有者应以独占方式锁定表 并禁用访问规则。禁用访问规则时,此锁定禁止其他用户访问。复制完 数据之后,数据库所有者应绑定访问规则并将表解锁。


访问规则作为用户定义的 Java 函数

访问规则可以使用用户定义的 Java 函数。例如,可以使用 Java 函数编 写复杂的规则,在规则中使用应用程序的配置文件、登录到应用程序的 用户和当前分配给用户的应用程序的角色。

以下 Java 类使用 GetSecVal 方法来演示如何在访问规则中使用将 JDBC

用作用户定义函数的 Java 方法:

import java.sql.*; import java.util.*;


public class sec_class {

static String _url = "jdbc:sybase:asejdbc"; public static int GetSecVal(int c1)

{

try

{

PreparedStatement pstmt; ResultSet rs = null; Connection con = null;

int pno_val; pstmt = null;

Class.forName("sybase.asejdbc.ASEDriver"); con = DriverManager.getConnection(_url);


if (con == null)

{

return (-1);

}


pstmt = con.prepareStatement("select classification from sec_tab where id = ?");


if (pstmt == null)

{

return (-1);

}


pstmt.setInt(1, c1);


rs = pstmt.executeQuery(); rs.next();

pno_val = rs.getInt(1); rs.close(); pstmt.close(); con.close();

return (pno_val);


}

catch (SQLException sqe)

{

return(sqe.getErrorCode());

}

catch (ClassNotFoundException e)

{


System.out.println("Unexpected exception :" + e.toString());

System.out.println("\nThis error usually indicates that " + "your Java CLASSPATH environment has not been set properly.");

e.printStackTrace();


return (-1);

}

catch (Exception e)

{

System.out.println("Unexpected exception :" + e.toString());

e.printStackTrace(); return (-1);

}

}

}

在编译完 Java 代码后,可以从 isql 运行相同的程序,如下所示。 例如:

javac sec_class.java


jar cufo sec_class. jar sec_class.class installjava -Usa -Password - f/work/work/FGAC/sec_class.jar -

-D testdb

isql 中:

/*to create new user datatype class_level*/ sp_addtype class_level, int

/*to create the sample secure data table*/ create table sec_data (c1 varchar(30),

c2 varchar(30), c3 varchar(30),

clevel class_level)

/*to create the classification table for each user*/ create table sec_tab (userid int, clevel class-level int)


insert into sec_tab values (1.10) insert into sec_tab values (2.9) insert into sec_tab values (3.7) insert into sec_tab values (4.7) insert into sec_tab values (5.4) insert into sec_tab values (6.4) insert into sec_tab values (7.4)


declare @v1 int select @v1 = 5 while @v1 > 0 begin

insert into sec_data values('8', 'aaaaaaaaaa', 'aaaaaaaaaa', 8)

insert into sec_data values('7', 'aaaaaaaaaa', 'aaaaaaaaaa', 7)

insert into sec_data values('5', 'aaaaaaaaaa', 'aaaaaaaaaa', 5)

insert into sec_data values('5', 'aaaaaaaaaa', 'aaaaaaaaaa', 5)

insert into sec_data values('2', 'aaaaaaaaaa', 'aaaaaaaaaa', 2)

insert into sec_data values('3', 'aaaaaaaaaa', 'aaaaaaaaaa', 3)

select @v1 = @v1 -1 end

go


create access rule clevel_rule


@clevel <= sec_class.GetSecVal(suser_id()) go


create default clevel_def as sec_class.GetSecVal(suser_id()) go


sp_bindefault clevel_def, class_level go


sp_bindrule clevel, class_level go


grant all on sec_data to public go

grant all on sec_tab to public go




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------