创建测试主表. ID 是主键.
CREATE TABLE test_main (
id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 创建测试子表.
CREATE TABLE test_sub (
id INT,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 插入测试主表数据.
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');
-- 插入测试子表数据.
INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');
1>ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;
2>go
1>DELETE
2>test_main
3>WHERE
4>ID = 1;
5>go
消息 547,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
DELETE 语句与 REFERENCE 约束"main_id_cons"冲突。该冲突发生于数据库"Stock",表"dbo.test_sub", column 'main_id'。
语句已终止。
方法一、数据库数据加密
数据加密可以有效防止数据库信息失密性的有效手段。通常加密的方法有替换、置换、混合加密等。虽然通过密钥的保护是数据库加密技术的重要手段,但如果采用同种的密钥来管理所有数据的话,对于一些不法用户可以采用暴力破解的方法进行攻击。
但通过不同版本的密钥对不同的数据信息进行加密处理的话,可以大大提高数据库数据的安全强度。这种方式主要的表现形式是在解密时必须对应匹配的密钥版本,加密时就尽量的挑选最新技术的版本。
方法二、强制存取控制
为了保证数据库系统的安全性,通常采取的是强制存取检测方式,它是保证数据库系统安全的重要的一环。强制存取控制是通过对每一个数据进行严格的分配不同的密级,例如政府,信息部门。在强制存取控制中,DBMS所管理的全部实体被分为主体和客体两大类。主体是系统中的活动实体,它不仅包括DBMS 被管理的实际用户,也包括代表用户的各进程。
客体是系统中的被动实体,是受主体操纵的,包括文件、基表、索引、视图等等。对于主体和客体,DBMS 为它们每个实例(值)指派一个敏感度标记。主客体各自被赋予相应的安全级,主体的安全级反映主体的可信度,而客体的安全级反映客体所含信息的敏感程度。对于病毒和恶意软件的攻击可以通过强制存取控制策略进行防范。但强制存取控制并不能从根本上避免攻击的问题,但可以有从较高安全性级别程序向较低安全性级别程序进行信息传递。
方法三、审计日志
审计是将用户操作数据库的所有记录存储在审计日志(Audit Log)中,它对将来出现问题时可以方便调查和分析有重要的作用。对于系统出现问题,可以很快得找出非法存取数据的时间、内容以及相关的人。从软件工程的角度上看,目前通过存取控制、数据加密的方式对数据进行保护是不够的。因此,作为重要的补充手段,审计方式是安全的数据库系统不可缺少的一部分,也是数据库系统的最后一道重要的安全防线。
多媒体数据模型
多媒体数据模型主要采用关系数据模型的扩充和采用面向对象的设计方法。由于用传统的关系模型难以描述多媒体信息和定义对多媒体数据对象的操作,目前在关系模型扩充方面除了引入抽象数据类型外,较多的采用语义模型的方法。关系模型主要描述数据的结构,而语义模型则主要表达数据的语义,语义模型的层次高于关系模型,后者可以作为前者的基础。目前的研究表明,采用面向对象的方法来描述和建立多媒体数据模型是较好的方法,面向对象的主要概念包括对象、类、方法、消息、封装和继承等,可以方便地描述复杂的多媒体信息。
b 数据的压缩和解压缩 由于多媒体数据,如声音、图像及视频等数据量大,存贮和传输需要很大的空间和时间,因此必须考虑对数据进行压缩编码,压缩方法要考虑到复杂性,实现速度及压缩质量等问题。
c 多媒体数据的存贮管理和存取方法 目前常用的有分页管理、B+树 和Hash方法等。在多媒体数据库中还要引入基于内容的检索方法、矢量空间模型信息索引检索技术、超位检索技术及智能索引技术等。
d 多媒体信息的再现及良好的用户界面 在多媒体数据库中应提供多媒体宿主语言调用,还应提供对声音、图像、图形和动态视频的各种编辑和变换功能。
e 分布式技术 多媒体数据通信对网络带宽有较高的要求,需要相应的高速网络,此外还要解决数据集成、异构多媒体数据语言查询、调度和共享等问题。
1。
如果用户告诉你,程序突然慢了,该如何着手…… 2。 如果用户告诉你,程序突然无法连到database,该如何着手…… 大家讨论一下? Q: 如果用户告诉你,程序突然慢了,该如何着手…… A: 1 > 向问题提出者提出以下问题: 1 是否经做过数据库对象的分析 -->dba_tables(last_analyze) 2 是否经历过批量dml操作 -->(影响执行计划) 3 是否经历过数据库版本升级 -->(新的bug?) 4 用操作系统命令查看磁盘I/O是否异常,当然还有网络是否被其他资源占用 (硬件故障) 5 是不是有新的应用上线 6 有没有抱错信息 (如果有抱错信息可以缩小故障范围) 2> 下面开始问题诊断 诊断的接口就是v$session_wait ----------------------------------------- 第一个问题: 1、查看客户端进程,确认是否客户端本身有病毒或程序有问题 2、查看服务器进程/线程运行情况。
一、Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分析:这说明“localhost”计算机是存在的,但在这台机器上却没提供MySQL服务。
需要启动这台机器上的MySQL服务,如果机子负载太高没空相应请求也会产生这个错误。解决:既然没有启动那就去启动这台机子的mysql。
如果启动不成功,多数是因为你的my.ini配置的有问题。重新配置其即可。
如果觉得mysql负载异常,可以到mysql/bin 的目录下执行mysqladmin -uroot -p123 processlist来查看mysql当前的进程。二、Unknown MySQL Server Host 'localhosadst' (11001)翻译:未知的MySQL服务器 localhosadst分析:服务器 localhosasdst 不存在。
或者根本无法连接解决:仔细检查自己论坛下面的 ./config.inc.php 找到$dbhost重新设置为正确的mysql 服务器地址。三、Access denied for user: 'roota@localhost' (Using password: YES)翻译:用户 roota 访问 localhost 被拒绝(没有允许通过)分析:造成这个错误一般数据库用户名和密码相对mysql服务器不正确解决:仔细检查自己论坛下面的 ./config.inc.php 找到$dbuser、$dbpw核实后重新设置保存即可。
四、Access denied for user: 'red@localhost' to database 'newbbs'翻译:用户 red 在localhost 服务器上没有权限操作数据库newbbs分析:这个提示和问题三是不同的。那个是在连接数据库的时候就被阻止了,而这个错误是在对数据库进行操作时引起的。
比如在select update等等。这个是因为该用户没有操作数据库相应的权力。
比如select 这个操作在mysql.user.Select_priv里记录 Y 可以操作N 不可以操作。解决:如果是自己的独立主机那么更新mysql.user 的相应用户记录,比如这里要更新的用户为red 。
或者直接修改 ./config.inc.php 为其配置一个具有对数据库操作权限的用户或者通过如下的命令来更新授权grant all privileges on dbname.* to 'user'@'localhost' identified by 'password'提示:更新了mysql库中的记录一定要重启mysql服务器才能使更新生效FLUSH PRIVILEGES;五、No Database Selected翻译:没有数据库被选择上分析:产生的原因有两种config.inc.php 里面$dbname设置的不对。致使数据库根本不存在,所以在 $db->select_db($dbname); 时返回了false和上面问题四是一样的,数据库用户没有select权限,同样会导致这样的错误。
当你发现config.inc.php的设置没有任何问题,但还是提示这个错误,那一定就是这种情况了。解决:对症下药打开config.inc.php 找到$dbname核实重新配置并保存同问题四的解决方法六、Can't open file: 'xxx_forums.MYI'. (errno: 145)翻译:不能打开xxx_forums.MYI问题分析:这种情况是不能打开 cdb_forums.MYI 造成的,引起这种情况可能的原因有:1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。解决方法:1、修复数据表可以使用下面的两种方式修复数据表:(第一种方法仅适合独立主机用户)1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。
更改当前目录到 MySQL/bin 下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:myisamchk -r 数据文件目录/数据表名.MYI;2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上两种修复方式在执行前一定要备份数据库。
本文将讲述。
表的故障检测和修正的一般过程如下: ◆ 检查出错的表。如果该表检查通过,则完成任务,否则必须修复出错的数据库表。
◆ 在开始修复之前对表文件进行拷贝,以保证数据的安全。 ◆ 开始修复数据库表。
◆ 如果修复失败,从数据库的备份或更新日志中恢复数据。 在使用myisamchk或isamchk检查或修复表之前,应该首先注意: ◆ 建立数据库备份和使用更新日志,以防修复失败,丢失数据。
◆ 仔细阅读本章内容以后再进行操作,尤其是不应该在阅读“避免与MySQL服务器交互作用”之前进行操作。因为,在你没有足够的知识之前贸然操作,可能会引起严重的后果。
◆ 如果你在Unix平台上对表进行维护时,应该首先注册到专用的帐户 mysql,以避免对表读写访问产生所有权的问题,以及破坏数据库目录的所有权限。 数据库表的维护工具 MySQL的myisanchk和isamchk实用程序很类似,基本上它们具有同样的使用方法。
它们之间的主要区别时所使用的表的类型。为了检查 /修复MyISAM表(.MYI和.MYD),你应该使用myisamchk实用程序。
为了检查/修复ISAM表(.ISM和.ISD),你应该使用 isamchk实用程序。 ◆ 为了使用任一个使用程序,应指明你要检查或修复的表,myisamchk和isamchk的使用方法为: shell>myisamchk options tbl_nameshell>isamchk options tbl_name 如果你愿意,你可以在命令行命名几个表。
◆ 你也能指定一个名字作为一个索引文件(用“ .MYI”或“.ISM”后缀),它允许你通过使用模式“*.MYI”或“.ISM”指定在一个目录所有的表。例如,如果你在一个数据库目录,你可以这样在目录下检查所有的表: shell> myisamchk *.MYIshell>isamchk *.ISM ◆ 如果你不在数据库目录下,你可指定目录的路径: shell> myisamchk options /path/to/database_dir/*.MYIshell> isamchk options /path/to/database_dir/*.ISM ◆ 你甚至可以通过为MySQL数据目录的路径指定一个通配符来作用于所有的数据库中的所有表: shell> myisamchk options /path/to/datadir/*/*.MYIshell> isamchk options /path/to/database_dir/*/*.ISM 这个方法无法在windows平台下使用。
注意 不论是myisamchk还是isamchk都不对表所在的位置做任何判断,因此,应该或者在包含表文件的目录运行程序,或者指定表的路径名。这允许你将表文件拷贝到另一个目录中并用该拷贝进行操作。
检查数据库表 myisamchk和isamchk提供了表的检查方法,这些方法在彻底检查表的程度方面有差异。 标准的方法检查表 通常用标准的方法就足够了。
对表使用标准的方法进行检查,不使用任何选项直接调用即可,或用-s或--silent选项的任何一个: myisamchk tbl_nameisamchk tbl_name 这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。
完全彻底的数据检查 为了执行扩充检查,使用--extend-check或-e选项,这个选项检查数据: myisamchk -e tbl_nameisamchk -e tbl_name 它做一个完全彻底的数据检查(-e意思是“扩展检查”)。它对每一行做每个键的读检查以证实他们确实指向正确的行。
这在一个有很多键的大表上可能花很长时间。myisamchk通常将在它发现第一个错误以后停止。
如果你想要获得更多的信息,你能增加--verbose(-v)选项。这使得 myisamchk或isamchk继续一直到最多20个错误。
在一般使用中,一个简单的标准检查(没有除表名以外的参数)就足够了。 中等程度的检查 指定选项--medium-check或-m myisamchk -m tbl_name 中等程度的检查不如扩展检查彻底,但速度快一些。
其意义不大,较少使用。 如果对于--extend-check检查不报告错误,则可以肯定表是完好的。
如果你仍然感觉表有问题,那原因肯定在其它地方。应重新检查人和好像有问题的查询以验证查询是正确书写的。
计算机安全是当前信息社会非常关注的问题,而数据库系统更是担负着存储和管理数据信息的任务,因而如何保证和加强其安全性,更是迫切需要解决的热门课题。
下面将讨论数据库的安全策略,并简单介绍各种策略的实现方案。一、数据库的安全策略 数据库安全策略是涉及信息安全的高级指导方针,这些策略根据用户需要、安装环境、建立规则和法律等方面的限制来制定。
数据库系统的基本安全性策略主要是一些基本性安全的问题,如访问控制、伪装数据的排除、用户的认证、可靠性,这些问题是整个安全性问题的基本问题。数据库的安全策略主要包含以下几个方面:1.保证数据库存在安全 数据库是建立在主机硬件、操作系统和网络上的系统,因此要保证数据库安全,首先应该确保数据库存在安全。
预防因主机掉电或其他原因引起死机、操作系统内存泄漏和网络遭受攻击等不安全因素是保证数据库安全不受威胁的基础。2.保证数据库使用安全 数据库使用安全是指数据库的完整性、保密性和可用性。
其中,完整性既适用于数据库的个别元素也适用于整个数据库,所以在数据库管理系统的设计中完整性是主要的关心对象。保密性由于攻击的存在而变成数据库的一大问题,用户可以间接访问敏感数据库。
最后,因为共享访问的需要是开发数据库的基础,所以可用性是重要的,但是可用性与保密性是相互冲突的。二、数据库的安全实现1.数据库存在安全的实现 正确理解系统的硬件配置、操作系统和网络配置及功能对于数据库存在安全十分重要。
比如对于硬件配置情况,就必须熟悉系统的可用硬盘数量,每个硬盘的可用空间数量,可用的CPU数量,每个CPU的Cache有多大,可用的内存数量,以及是否有冗余电源等问题;对于操作系统,则应该周期性的检查内存是否有泄漏,根文件系统是否需要清理,重要的日志是否已经察看;对于网络就应该随时确保网络没有过载,网络畅通、网络安全是否得到保证等等。因为这一部分不是本文的重点,所以不再一一细述,总之,这三方面的安全运行是和维护数据库存在安全不可分割的。
2.数据库完整性的实现 数据库的完整性包括库的完整性和元素的完整性。数据库的完整性是DBMS(数据库管理系统)、操作系统和系统管理者的责任。
数据库管理系统必须确保只有经批准的个人才能进行更新,还意味着数据须有访问控制,另外数据库系统还必须防范非人为的外力灾难。从操作系统和计算系统管理者的观点来看,数据库和DBMS分别是文件和程序。
因此整个数据库的一种形式的保护是对系统中所有文件做周期性备份。数据库的周期性备份可以控制由灾祸造成的损失。
数据库元素的完整性是指它们的正确性和准确性。由于用户在搜集数据、计算结果、输入数值时可能会出现错误,所以DBMS必须帮助用户在输入时能发现错误,并在插入错误数据后能纠正它们。
DBMS用三种方式维护数据库中每个元素的完整性:通过字段检查在一个位置上的适当的值,防止输入数据时可能出现的简单错误;通过访问控制来维护数据库的完整性和一致性;通过维护数据库的更改日志,记录数据库每次改变的情况,包括原来的值和修改后的值,数据库管理员可以根据日志撤消任何错误的修改。3.数据库保密性的实现 数据库的保密性可以通过用户身份鉴定和访问控制来实现。
DBMS要求严格的用户身份鉴定。一个DBMS可能要求用户传递指定的通行字和时间日期检查,这一认证是在操作系统完成的认证之外另加的。
DBMS在操作系统之外作为一个应用程序被运行,这意味着它没有到操作系统的可信赖路径,因此必须怀疑它所收的任何数据,包括用户认证。因此DBMS最好有自己的认证机制。
访问控制是指根据用户访问特权逻辑地控制访问范围和操作权限。如一般用户只能访问一般数据、市场部可以得到销售数据、以及人事部可以得到工资数据等。
DBMS必须实施访问控制政策,批准对所有指定的数据的访问或者禁止访问。DBMS批准一个用户或者程序可能有权读、改变、删除或附加一个值,可能增加或删除整个字段或记录,或者重新组织完全的数据库。
4.数据库可用性的实现 数据库的可用性包括数据库的可获性、访问的可接受性和用户认证的时间性三个因素。下面解释这三个因素。
(1)数据的可获性 首先,要访问的元素可能是不可访问的。例如,一个用户在更新几个字段,其他用户对这些字段的访问便必须被暂时阻止。
这样可以保证用户不会收到不准确的信息。当进行更新时,用户可能不得不阻止对几个字段或几个记录的访问通道,以便保证数据与其他部分的一致性。
不过有一点要注意,如果正在更新的用户在更新进行期间退出,其他用户有可能会被永远阻止访问该记录。这种后遗症也是一个安全性问题,会出现拒绝服务。
(2)访问的可接受性 记录的一个或多个值可能是敏感的而不能被用户访问。DBMS不应该将敏感数据泄露给未经批准的个人。
但是判断什么是敏感的并不是那么简单,因为可能是间接请求该字段。一个用户也许请求某些包含敏感数据的记录,这可能只是由非敏感的特殊字段推出需要的值。
即使没有明确地给出敏感的值,数。
关于事务日志 在使用sql server时,经常会出现系统提示事务日志 已满的错误信息(错误1105),以使的应用系统的数据库 无法打开,影响到系统的正常运行。
通常有三种方法可以 解决这一问题: ●扩展数据库空间 可以通过扩展数据库大小来增大事务日志的空间。先 利用alter database增大数据库空间,再通过sp—logdev ice系统存储过程把事务日志转移到事务日志数据库设备 上去,具体语法如下: 语法: ·alter database database—name on database—d evice'增大数据库空间 ·sp—logdevice dbname,database_device'转移 事务日志 例:—log—dev=8 sp—logdevicemydbmydb—log—dev 如果数据库对数据库设备变得过大(通常在决定数据 库大小时,先指定一个保守的值,如果以后需要增大空间 ,用alter database增加其大小),需先扩展数据库设备 ,再增大事务日志的空间,具体语法如下: 语法: ·disk resize name=logical—device_name,size= final—size'扩展数据库设备 ·alter database database—name on database—d evice'增大数据库空间 ·sp_logdevicedbname,database_device'转移事 务日志 例:disk resize name=mydb on mydb—log—dev=8 alter database mydb on mydb—log—dev=8 sp—logdevice mydb mydb—log—dev (以上工作也可以通过对microsoft sql enterprise manger提供的gui界面直接操作来完成。)
●定期执行dump database语句来完成截短 事务日志。其语法为: 语法: ·dump database dbname to dump_device 例:dump databas emydb to mydump—dev(通过将 数据库mydb备份到备份设备mydump—dev上完成截短事务日 志。)
●trunc.logonchkpt.选项来完成截短事 务日志 缺省时,在新建的数据库上,trunc.logonchkpt. 选项设置成off(缺省值),事务日志永远不作备份,事务 日志不停地增长,可能会耗尽数据库的存储空间,将trun c.logonchkpt.选项设置成on,每次checkpoint进程发 生时(通常每分钟一次)都截短事务日志(删除已提交的 事务),使得事务日志不会不停地增长以耗尽数据库的存 储空间。 配置选项和值 在使用sql server时,同样会经常出现系统提示user connections(用户连接)已达到配置数,系统无法正常 运行的问题。
sql server用户连接最大值是32767,而缺 省时的一般配置数为15个。如果使用中的用户连接已达到 配置数,而又来了一个用户连接请求,sqlserver将回送一 个错误消息。
这时可以通过修改sql server的配置选项中 的user connections项的最大值来解决这一问题。配置选 项的显示和管理可通过sp—configure系统过程来完成, 但不能使用sp—configure来设定一个比当前配置选项最大 值还大的配置选项。
语法:sp—configure〔'config—name'〔,confi g—value〕〕 其中config—name为配置选项的项名,config—valu e为设置值。 例:sp—configure'user_connections',30 同时用户可以使用sp—configure来显示配置选项, 通过重新设置一些配置选项,调节性能和优化存储分配。
(注:修改sql server的配置选项,必须以系统管理员身 份登录。)?。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.581秒