如何应对无法收缩数据库中某一文件的问题? (不能收缩id为7的数据库中id为1的文件)

在使用数据库时,有时会遇到某一文件无法收缩的问题。这种情况下,如果不及时处理,会导致数据库的性能下降,影响数据的有效性。因此,我们需要采取一些措施来解决这个问题。

1. 确认无法收缩的原因

我们需要确保无法收缩的文件是由于磁盘空间不足而产生的问题。在确认了磁盘空间充足后,我们还需要检查是不是其他的进程或服务占用了该文件。如果该文件被用于缓存,那么缩小文件大小会影响缓存的性能。因此,在确认了问题的原因后,我们才能采取相应的解决方案。

2. 优化数据库的表设计

如果我们确定文件无法缩小是由于表设计问题引起的,那么我们需要考虑优化数据库的表设计。在优化表设计时,可以采取以下措施:

(1)修复表数据的一致性问题:该方案适用于那些在数据库中包含大量历史版本的表。

(2)删除冗余数据:当表中存在冗余和重复的数据时,可以考虑对其进行删除,从而减少文件的大小。

(3)优化表的聚簇索引:为了更大化索引的效率和性能,表的聚簇索引可以进行优化。

3. 维护数据库的索引

维护数据库的索引可以帮助我们优化数据库的性能,并减少文件的大小。在进行索引维护时,我们需要考虑到以下几点:

(1)重建索引:当数据库的索引分布不均匀或者出现碎片化时,我们可以通过重建索引来优化索引布局。

(2)删除无用索引:删除无用索引可以减小文件的大小,从而降低数据库的空间占用量。

4. 确保数据库的备份

无论采取何种方案来优化数据的文件大小,我们都需要考虑到数据库备份的问题。因为采用非常规方式来减少数据文件的大小,可能会导致数据丢失或文件损坏。因此,在进行优化的工作时,我们应该确保数据库有一个可靠的备份,在发生问题时可以及时恢复数据和文件。

在应对无法收缩数据库中某一文件的问题时,我们需要先确定问题的原因,然后采取相应的措施来解决问题。无论采用何种方案,我们都需要时刻关注数据库的备份,并确保数据的完整性和可靠性。只有这样,我们才能有效地解决数据库性能下降的问题,保障数据的有效性。

相关问题拓展阅读:

ACCESS数据库SQL语句问题

上表中为银改真时

select * from 表名 where 字段=true

上表中枝搏核为假时

select * from 表猛掘名 where 字段=false

select * from 数据库名.dbo.sysobjects where xtype = ‘U’ order by name asc

差数据库下的表名侍启蠢

SELECT * FROM 数据库名.dbo.SysColumns WHERE id=Object_Id(‘数据库名.dbo.表名’)

sp_helpdb查本服务器中所有数据库 可跟库名

例:sp_helpdb 库名

—–

sp_databases查看本服务器中可用的数据库

sp_helpfile-查看当前工作着的数据库

sp_helpfilegroup——查看当前工作着的组的信息。可加参数,跟组名

例:sp_helpdb 库名

sp_renamedb改数据库名

例:sp_renamedb 旧库名,新库名

select groupname from sysfilegroups where status=24

查看文件组 =8是查只读文件组 =16是查默认文件组 =24是查即只读又默认

—–

sp_dboption—–修改数据库选项值

例:sp_dboption 库名 选项 值

值决定真假 一般用:true/faule 或off/on表示

选项一般常用为:use only(数据库拥有者)single user(单一用户)read only(只读)

—-

dbcc shrinkdatabase收缩数据库

例:dbcc shrinkdatabase (库名,10)

收缩库,剩余空间保留10%,后面如果不加notruncate,则释放空间操作系统,

加truncateonly,归还空间给操作系统,但忽略所给的百分比数旁渣值。

dbcc shrinkfile–收缩文件

用法与ddcc shrinkdatabase相同。

alter database修改数据库

用法:这是起始句,告诉要做的是修老陪改数据库,然后再接要做什么工作。每次只做一项工作

alter database 库名

add file 文件名….to filegroup 文件组名

–增加库文件,格式与建库时括号里指定大小时的格式一样

add log file 文件名-增加日志文件

remove file 文件名删除库内的文件

add filegroup 文件组名-增加一个文件组

modify file 文件名—–修改文件属性

modify filegroup 组名—-修改文件组属性

—–

drop database删除数据库

例:drop database 库名1,库名-可同时删除两个库

create table 表名

(列名 类型,

列名 类型)建立表

select * from 表名查询表结构

select @@dbts—-查询最后一次操作

insert into 表名

(列名,列名)

values (变量,变量…..)–向表中插入数据

如省略列名,则必须把每列的变量填全,不可缺少。可以省略 into

sp_addtype 自定义类型名 系统类型名用户自定义类型

sp_droptype 自定义类型名—–删除自定义类型

如有数据库正在使用该自定义类型,则不能删除

alter table修改表结构

用法: alter table 表名

alter column 列名 类型–修改列的类型

drop column 列名删除列

add (column) 列名—–增加列,实际用时不加 column

sp_help查看数据库中对象信息

用法: sp_help 表名—查表的信息

或 sp_help 库名—查库信息

后面可以跟库名或者表名,是查数据库或者表的信息

sp_spaceused—–查看对象占用的空间信息

用法: sp_spaceused–查当前库占用空间信息

或 sp_spaceused 表名查指定表占用空间信息

后面可以加表名查看表占空间信息。如不加,则查看当前数据库。

sp_depends查看对象的相关性

用法: sp_depends 表名–后面加表名

sp_rename重新命名

用法: sp_rename 旧表名,新表名-改表名

或 sp_rename ‘表名.旧列名’,’新列名’ ‘column’修改列名

create index——创建索引

用法: create index 索引名 on 表名 (列名)创建索引

或: create unique clustered index 索引名 on 表名 (列名)

——创建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引

—非簇集索引用:nonclustered

select top—-查表中前几行

用法: select top 3 * from 表名查表中前三行

或: select top 10 percent * from 表名显示表中前10%数据

加入percent是百分比的意思。只以大于的最小整数,无小数

select 列名,列名,列名 from 表名显示表中特定的列

select *,列名 from 表名-查询表中所有,后面再加一列

select distinct—查询不重复数据 distinct用于去掉重复数据

用法: select distinct * from 表名查表中不重复数据

或: select distinct * into 新表名 from 旧表名查旧表中不重复数据同时生成新表

select 列名+列名 from 表名允许有计算式出现,显示无列名的计算结果

如想加列名,则: select 列名+列名 as 新列名 from 表名

select 年龄,联系,cast (年龄 as varchar(2))+联系 from 表名

把整型数据年龄转化为字符型与字符型数据联系相加

——

ctrl+o(字母O)清空数据。空值与别的数据运算结果为空

——

select 原始列名 别名 from 表名

select 原始列名 as 别名 from 表名

select 别名=原始列名 from 表名

指定别名的三种方法。非法符号可”或引起来,不得直接使用。

——

select * from 表名

where 年龄 between 20 and—显示年龄在20到30之间的人

between是从条件一到条件二之间的限制

select * from 表名

where 年龄 in (20,21,22)显示年龄为20、21、22的人

in是限制在这些条件内的,是显示一个取值范围

select * from 表名

where 联系 like ‘%’查是1-3开头的人

like是像这些条件的语句,能用通配符:%、_、、

意思分别代表:所有字符、一个字符、一位上可取值、一位上不可取值

select * from 表名

where 姓名 like ‘%’

or 姓名 like ‘%e>’

escape ‘e’显示以‘’结尾的所有数据,中间有不显示

escape ”是指定通配符

order by-给数据排序

用法: select * from 表名

order by 年龄-排序显示年龄。默认为升序(asc)要降序必须加desc

select distinct top 3 from 表名

order by 年龄 desc显示更大的三种年龄

select * from 表名

where 年龄 in (select distinct top 3 年龄 from 表名 order by 年龄)

order by 年龄—-显示年龄最小的所有人,并排序

select 姓名,

case

when MCSE成绩 >=80 and MCSE成绩=60 and MCSE成绩=0 and MCSE成绩—把学号大于30的资料删除

如不指定条件,则删表内所有数据。这是记录日志文件的操作

truncate table 表名

清空表。不记录日志文件的操作。

create view 图名—–新建视图

用法: create view 图名

as

select 列名 from 表名

syscomments这个表存着视图代码的信息

alter view 图名

with encryption

as

select 列名 from 表名—-用with encyption语句给视图原代码加密

不可恢复,除非保留源代码

sp_helptext 图名查看视图源代码

select text from syscomments

where id =(select id from sysobjects where name =’图名’)

查视图的代码

create view 图名

as

select * from 源图名—-基于源图创建新视图

create view 图名

as

select 列1 as 新列1,列2 新列2,列3=新列–起别名的三种方法

from 表名—-在新视图中为列起别名,则所见的是新起的别名

sp_depends 表名—-查该表的相关性,有多少表、图与之相关。

create view 图名

select * from 表名

where 年龄

with check option–强制插入数据符合年龄小于20的条件,加在where后面

是约束insert和update语句的

select 男公民.姓名,女公民.姓名 from 男公民,女公民

where 男公民.配偶编号=女公民.编号

查结婚男女。较原始的语法,后被下列语法取代

或: select 男公民.姓名,女公民.姓名

from 男公民 join 女公民 on 男公民.配偶编号=女公民.编号

新的形式,在join之前省略了inner语句。

–可用左连接(*=或left outer join)右连接(=*或right outer join)全连接(full outer)

—-where不能做全连接,但可以做连接的约束

select * from 男公民

where 配偶编号 in (select 编号 from 女公民)

嵌套查询,查配偶编号在女公民表中编号列中出现过的

select distinct 客户表.*

from (select * from 订单表 where 订单年份=2023) as d,客户表

where d.客户号=客户表.客户号

—–子查询放在from身后,也可以放在where身后

——

select (select 子查询语句) from 表名

这种格式要求子查询查出的必须是唯一的数据

——

select a.员工编号,a.员工姓名,b.员工姓名 as 领导姓名

from 员工表 as a,员工表 as b

where a.部门领导编号=b.员工编号

select a.员工编号,a.员工姓名,b.员工姓名 as 领导姓名

from 员工表 as a join 员工表 as b on a.部门领导编号=b.员工编号

select a.员工编号,a.员工姓名,

(select 员工姓名 from 员工表 as b where a.部门领导编号=b.员工编号) as 领导姓名

from 员工表 as a

三种查询员工领导的方法

——如果里面总经理领导编号是这空的,这种查询方法不显示空值。如要显示,则用左连接

sp_tables——查当前数据库中的所有表

select * from 男公民

union——联合。自动升序排序,并去掉重复语句

select * from 女公民

—–查询结果是男公民和女公民表的总集。如果不去掉重复的,则用 union all

—–如果要降序排,则要在最后一个select语句后面加上order by 列名 desc

—–用union查询时,结果集内列数必须相同,并且数据类型必须相互兼容

—–多表联合查询加order by时,后面必须跟之一个结果集的列名

select top 2 成绩 from 表

order by 成绩 desc查前两种更好成绩

select top 2 with ties 成绩 from 表

order by 成绩 desc查前两种更好成绩所有人的信息

select top 1 a.成绩

from (select distinct top 3 成绩 from 表 order by 成绩 desc) as a

order by 成绩-嵌套查询,查考成绩第三名的值

select max (SQL成绩),min (MCSE成绩) from 表

—–查SQL更高分和MCSE更低分

—–常用的函数:max(更大),min(最小),sum(总和),avg(平均值)

—–count(*)统计表内数据的行数。count(列名)统计表内列里非空值的行数

select count(*) from 表名-查表内有多少行数据

select count(列名) from 表名—-查表内列中有多少行非空数据

select min(成绩),max(成绩),sum(成绩),avg(成绩),count(*),count(成绩) from 表名

返回显示数据只有一行。中间不能加列名,如想加,可以在后面加列。

group by—分组统计,后面跟的是列名

上面select检索多少原始列,后面group by就要跟多少原始列

例: select 性别,avg(年龄) from 表名

group by 性别统计性别的平均年龄

select 年龄,avg(年龄) from 表名

where 年龄

group by 年龄查年龄小于23岁的各年龄段平均年龄

或也可用如下方法:

select 年龄,avg(年龄) from 表名

group by 年龄

having

having是做为group by的子句出现的,不能单独使用

select 年龄,avg(年龄) from 表名

where 年龄

group by all 年龄显示所有年龄,但只统计年龄小于23的,大于23的显示空值

select 品牌,颜色,sum(价格),avg(价格) from 汽车表

group by 品牌,颜色

with cube-多维统计,按不同品牌不同颜色统计,也是group by的子句

其结果出现把各品牌统计一下,最后再统计所有品牌、所有颜色的总统计

select 品牌,颜色,sum(价格),avg(价格) from 汽车表

group by 品牌,颜色

with rollup只按之一列统计,也是group by的子句

即统计品牌各颜色和所有品牌所有颜色的总统计

select 品牌,颜色,价格 from 汽车表

compute sum(价格),avg(价格)—出现两个结果集

查原始列,另外统计所有的总和与平均值

select 品牌,sum(价格),avg(价格) from 汽车表

group by 品牌只对汽车品牌进行统计。进行分组的列不一定用来统计

select 品牌,颜色,价格 from 汽车表

order by 品牌

compute sum(价格),avg(价格) by 品牌

按品牌分组统计。分别显示品牌各款,然后再显示函数计算值

exists存在。相当于一个判断开关。说对了执行,说错了放弃

用法: select * form 表名

where exists (select * from 表名 where 性别=’男’)

——如果存在性别为男的,执行查询。如果不存在,则不执行命令。

数据完整性:1.实体完整性—-用unique(唯一)或主键控制,数据不能重复

.值域完整性—-用check控制。控制的是列中不能有非法数据

.引用完整性—-一列的取值完全依赖于前一列时,用这个。

.用户自定义完整性

create table 表名

(列1 int primary key,设置列级主键,紧跟在设置列的后面。

列2 int)

create table 表名

(列1 int,

列2 int,

primary key (列1))–设置表级主键,放在建表语句的最后面。

create table 表名

(列1 int constraint pk_表 primary key,

列2 int)

把列1设为主键,并且起名叫:pk_表。constraint是命名的命令

create table 表名

(列1 int,

列2 int,

列3 int,

constraint pk_表 primary key (列1,列2))

把列1和列2合起来设为表级的联合主键,并起名叫pk_表

sp_helpconstraint——查表中约束的信息

用法: sp_helpconstraint 表名

alter table 表名

drop 约束名—删除约束

drop默认删的是约束,所以不用指定要删什么东西,直接给约束名就行

是: -1 否: 0

上凯绝表中取衡告字段为真的记录,可以用 select * from 表名 where 字段咐孙明=-1

sql server 2023 中怎么创建组和数据库的映射关系

1、不同之:组织方式.文件系统的文件通常是由操作系统规定的,但是功能方面比较简单,方便查找定位之用,文件与文件之间不能调用数据;而数据库中的文件是由数据库软件组织的,其程度很高,能方便查找,更重要是它们之间联系紧密!能相互传递据.

2、(1)物理数据层。它是数据库的最内层,是物理存贮设备上实际存储的数据的。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。

(2)概念数据层。它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。

(3)逻辑数据层。它是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据,即逻辑记录的。

3、程序和数据的独立性是数据库的主要特征之一.作为工程数据库管理系统,也必须保持这个特征.为此,介绍了具体的工程数据库管理系统EDRMS程序与数据的独立性实现,并用实例予以说明.

1、a关系:关系是一个二维表,表的每行对应一个元组,表的列对应属性。

b属性:指关系中的列;

域:值的集,每个属性的取值的范围;

元组(Tuple):给出一组域产生笛卡儿乘积D1,D2…Dn,产生笛卡儿乘积D1*D2*….Dn=其中(d1,d2..dn)为元组。

c

关系的表:是一个简单的表,不准许出现组合的属性。

d用二维表的形式来表示实体集属性间的关系,以及实体之间联系的形式。

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果中所包括的列,并删除连接表中的重复颂返脊列。

1、在SQL Server 2023 中,数据库由存储特定结构化数据集的表组成。表中包含行(有时称作记录或元组)和列(有时称作特性)的。表中的每一列都设计为存储某种类型的信息(例如,日期、名称、美元金额或数字)。表上有几种控制(约束、规则、触发器、默认值和自定义用户数据类型)用于确保数据的有效性。表上可以有索引,利用索引可以快速地找到行。可将声明引用完整性 (DRI) 约束添加到表上,以确保不同表中相互关联的数据保持一致。数据库还可以存储过程,这些过程使用 Transact-SQL 编程代码对数据库中的数据进行操作,如存储对表数据提供自定义访问的视图。

2、SQL Server 2023 使用一组文件映射数据库。数据库中的所有数据和对象(如表、存储过程、触发器和视图)都存储在文件组中。

3、主要数据文件,次要数据文件,事务日志文件

4、因为利用事务日志备份可以将数据库恢复到特定的即时点(如输入不想要的数据之前的那一点)或故障发生点。在媒体恢复策略中应考虑利用事务日志备份。

1、表是包含数据库中所有数据的数据库对象。表定义为列的。

2、每行代表惟一的一条记录,而每列代野渗表记录中的一个域。

3、一对多关系,多对多关系,一对一关系

1、Transact-Sql语言的分类如下:

数据类型

变量说明

用来说明变量的命令

流程控制语句

2、null表示空值;与其他的比较既非空于空值的区别;null在表中即为空挡数据。

5、通常与LIKE关键字一起来使用

可以用在检查约束中使用LIKE

在后面的查询语句中还会经常使用到

6、ORDER BY是一个可选的子句,它允许你根据指定要order by的列来以上升或者下降的顺序来显示查询的

9、.SQL;文本文档

数据库中的索引与书籍中的目录类似。在一本书中,利用目录可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的行所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引;索引采用B树结构。索引包含一个条目,该条目有来自表中每一行的一世纤个或多个列(搜索关键字)。B树按搜索关键字排序,可以在搜索关键字的任何子词条上进行高效搜索。例如,对于一个A、B、C列上的索引,可以在A,A、B,A、B、C上对其进行高效搜索。

在随SQL Server 2023 提供的pubs示例数据库中,employee表在emp_id列上有一个索引。当SQL Server执行一个语句,在employee 中根据指定的emp_id值查找数据时,它能够识别emp_id列的索引,并使用该索引查找所需数据。如果该索引不存在,它会从表的之一行开始,逐行搜索指定的emp_id值。

SQL Server 2023为某些类型的约束(如PRIMARY KEY和UNIQUE约束)自动创建索引。可以通过创建不依赖于约束的索引,进一步对表定义进行自定义。

不过,索引为性能所带来的好处却是有代价的。带索引的表在数据库中会占据更多的空间。另外,为了维护索引,对数据进行插入、更新、删除操作所花费的时间会更长。在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。

在考虑是否为一个列创建索引时,应考虑被索引的列是否以及如何用于查询中。索引对下列查询很有帮助:

l搜索符合特定搜索关键字值的行(精确匹配查询)。精确匹配比较是指查询使用 WHERE 语句指定具有给定值的列条目。例如WHERE emp_id = ‘VPA30890F’。

l搜索其搜索关键字值为范围值的行(范围查询)。范围查询是指查询指定其值介于两个值之间的任何条目。例如WHERE job_lvl BETWEEN 9 and 12。

l在表 T1 中搜索根据联接谓词与表 T2 中的某个行匹配的行(索引嵌套循环联接)。

l在不进行显式排序操作的情况下产生经排序的查询输出,尤其是经过排序的动态游标。

l在不进行显式排序操作的情况下,按一种有序的顺序对行进行扫描,以允许基于顺序的操作,如合并联接和流聚合。

l以优于表扫描的性能对表中所有的行进行扫描,性能提高是由于减少了要扫描的列集和数据总量(该查询有覆盖索引可供使用)。

l搜索插入和更新操作中重复的新搜索关键字值,以实施PRIMARY KEY和 UNIQUE 约束。

l搜索已定义了FOREIGN KEY约束的两个表之间匹配的行。

在很多查询中,索引可以带来多方面的好处。例如,索引除了可以覆盖查询外,还使得可以进行范围查询。SQL Server 2023可以在同一个查询中为一个表使用多个索引,并可以合并多个索引,以便搜索关键字共同覆盖一个查询。另外,SQL Server会自动确定利用哪些索引进行查询,并且能够在表被改动时确保该表的所有索引都得到维护。

一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能,因为SQL Server 2023有更多的索引可供选择,以便确定以最快速度访问数据的更佳方法。对小型表进行索引可能不会产生优化效果,因为 SQL Server 2023在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而用户需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。从SQL Server 2023 复制数据时也可使用视图来提高性能并分区数据。

视图可以简化用户操作数据的方式。可将经常使用的联接、投影、联合查询和选择查询定义为视图,这样,用户每次对特定的数据执行进一步操作时,不必指定所有条件和限定。例如,一个用于报表目的,并执行子查询、外联接及聚合以从一组表中检索数据的复合查询,就可以创建为一个视图。视图简化了对数据的访问,因为每次生成报表时无需写或提交基础查询,而是查询视图。

视图允许用户以不同的方式查看数据,即使他们同时使用相同的数据时也如此。这在具有不同目的和技术水平的用户共享同一个数据库时尤为有利。例如,可定义一个视图以仅检索由客户经理处理的客户数据。视图可以根据使用该视图的客户经理的登录 ID 决定检索哪些数据。

可使用视图将数据导出至其他应用程序。例如,可能希望使用pubs数据库中的stores和sales表在Excel中分析销售数据。为此,可创建一个基于stores和sales表的视图。然后使用数据导入导出工具导出由视图定义的数据。

Transact-SQL UNION 运算符可在视图内使用,以将来自不同表的两个或多个查询结果组合成单一的结果集。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表含有华盛顿的销售数据,另一个表含有加利福尼亚的销售数据,即可从 UNION 创建这两个表的视图。该视图代表了这两个区域的销售数据。使用分区视图时,首先创建几个相同的表,指定一个约束以决定可在各个表中添加的数据范围。视图即使用这些基表创建。当查询该视图时,SQL Server 自动决定查询所影响的表,并仅引用这些表。例如,如果一个查询指定只需要华盛顿特区的销售数据,则 SQL Server 只读取含有华盛顿特区销售数据的表,而并不访问其余的表。分区试图可基于来自多个异类源(如远程服务器)的数据,而不仅仅局限于同一数据库中的表。例如,要将分别存储组织中不同区域数据的几台远程服务器上的数据组合起来,可以创建分布式查询,从每个数据源中检索数据,然后基于这些分布式查询创建视图。所有查询都只从包含查询所请求数据的远程服务器上读取表中的数据,其他在视图中由分布式查询引用的服务器均不被访问。

在使用SQL Server 2023 创建应用程序时,Transact-SQL编程语言是应用程序和SQL Server数据库之间的主要编程接口。使用Transact-SQL程序时,可用两种方法存储和执行程序。可以在本地存储程序,并创建向SQL Server发送命令并处理结果的应用程序;也可以将程序在SQL Server中存储为存储过程,同时创建执行存储过程并处理结果的应用程序。

SQL Server 2023中的存储过程与其他编程语言中的过程类似,利用存储过程可以完成以下任务。

l接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理。

l包含执行数据库操作(包括调用其他过程)的编程语句。

l向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。

l可使用 Transact-SQL EXECUTE 语句运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接用在表达式中。

使用SQL Server 2023中的存储过程代替存储在客户计算机本地的Transact-SQL程序有很多的好处。

l允许模块化程序设计。只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。

l允许更快执行。如果某操作需要大量Transact-SQL代码或需重复执行,存储过程将比Transact-SQL批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行Transact-SQL语句时,都要从客户端重复发送,并且在SQL Server 2023每次执行这些语句时,都要对其进行编译和优化。

l减少网络流量。一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

l可作为安全机制使用。即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。

十一

SQL Server 2023 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应INSERT、UPDATE或DELETE语句。触发器可以查询其他表,并可以包含复杂的Transact-SQL语句。触发器和触发它的语句要作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如磁盘空间不足),则整个事务即自动回滚。

触发器可通过数据库中的相关表实现级联更改。触发器可以强制CHECK约束定义的约束更为复杂的约束。与CHECK约束不同,触发器可以引用其他表中的列。例如,触发器可以使用另一个表中的SELECT比较插入或更新的数据,以及执行其他操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE或DELETE)允许采取多个不同的对策以响应同一个修改语句。

约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用Transact-SQL代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是更好的方法。

实体完整性总应在更低级别上通过索引进行强制,这些索引或是PRIMARY KEY和UNIQUE约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过CHECK约束进行强制,而引用完整性则应通过FOREIGN KEY约束进行强制。

十二

先创建登录名,可以是windows登录名也可以sql登录名

windows登录名是windows操作系统已经存在的用户名

sql登录名要在sql中创建而得的

要创建windows登录名:

例如:已经在windows中存在一个pkxz用户,域名是xxiang

create login from windows with default_database = css

alter login pkxz with name=ppp

drop login pkxz

注意:只有administrators组的用户可以访问所有实例,并可获所有访问权,

其余本地用户组里的组,只能相对应的访问实例。

例如:chenshanshan是users用户组里的,是实例的域用户帐户,

chenshanshan只能访问这个实例,并可获所有访问权。

例如:joan是users用户组里的,是实例的登录名,joan只能访问这个实例。

要创建sql登录名:

sql用户名是pkxz

create login pkxz with password =’xx121314′ , default_database = css

alter login pkxz with password = ‘pp’

drop login pkxz

注意:sql用户名只能相对应的访问实例

例如:pc是的登录名,只能访问这个实例,不可访问别的实例。

两者都创建了登录名,且都是css为默认数据库

然后创建完后把登录名授予角色

sp_addsrvrolemember ‘pkxz’,’sysadmin’

sp_dropsrvrolemember ‘pkxz’,’sysadmin’

服务器角色只能访问相对应的实例操作!不能访问别的实例!

创建用户

Ceate user pkxz_user from login pkxz with default_schema = pkxz_schema

如果没有创建架构的话,默认是dbo架构,这里是pkxz_schema

创建架构

创建架构的同时还可以创建该架构所拥有的表,视图,羡慕且可以对这些对象设轩权限。

create schema pkxz_schema authorization pkxz_user

Create Table pp (pp int)

Grant Select To pkxz_user_1

数据库角色

可以自己添加,还有内置固定数据库角色

自己添加角色

create role CreateTable authorization pkxz_user // CreateTable是角色名

分配权限

Grant Insert To CreateTable

添加成员

sp_addrolemember ‘CreateTable’,’pkxz_user_1′

public角色的两个特点,1、初始状态没有权限 2、所有的数据库的成员都是他的成员

当修改了public角色,其实更改了所有数据库成员的权限

权限的管理

Grant 授予 Revoke 收回权限 Deny 否认权限

例如:将一个表pt的插入权限授予pkxz_user_1

Grant Insert On pt To pkxz_user_1

在SQL Server 2023中,可以使用以下步骤创建组和数据库的映射关系:1. 打开SQL Server Management Studio,连接到目标数据库实例。2. 在“安全性”节点下,右键单击“登录名”,选择“新建登轮指录名”。3. 在“新建登录名”对话框中,指定登录名、密码和默认数据库等信息,并在“用户映射”选项卡中选择相关的数据库和存储过程等对象权限。4. 在“用户映射”选项卡中,勾选“映射到用户”的复选框,选择相应的用户和角色。5. 如果需饥桐咐要创建自定义角色,可以在“安全性”节点下右键单击“角色”,选择“新建角色”。烂纯6. 在“新建角色”对话框中,指定角色名称、描述和成员等信息,在“成员”选项卡中添加需要加入该角色的用户或其他角色。7. 在“用户映射”选项卡中,将角色映射到相应的数据库,并指定相应的权限。8. 完成后,点击“确定”按钮保存新建的登录名、角色和用户映射的配置。9. 等待一段时间后,新建的组和数据库映射关系就会生效,用户和角色可以通过登录名或者角色名称访问对应的数据库和存储过程等对象。

在SQL Server 2023中,可以通过以下步骤创建组和数据库的映射关系:1. 登录SQL Server 2023,打开SQL Server Management Studio。2. 在“对象资源管理器”中,展开“安全性”节点,右键单击“角色”文件夹,选择“新建角色”。3. 在“新建角色”窗口中,为角色命名,并选择所需的数据库。4. 在“成员”选项卡中,添加需要访问该数据库的用户或组。5. 点击“OK”按钮保存角色。6. 在SQL Server Management Studio中,打开要映射的数据库,右键单击该数据库并选择“属性”。7. 在“属性”窗口中,选择“安全性”选项卡,然后点击“添加”按钮。8. 在“选择”对话框中,选择之前创建的角色,然后点衫慧梁击“OK”按钮。9. 在“安全性”选项卡中,选择“角色”下拉菜单,然后选择要映射到该角色的Windows组或用户。10. 点击“OK”按钮保存映射。完成以上步骤后,该组或用户将可以访问该数据库,并拥有已分或运配给该角色碧侍的权限。

在 SQL Server 2023 中,可以使用以下步骤创建组和数据库的映射关系:1. 打开 SQL Server Management Studio,并连接到要创建映射关系的 SQL Server 实例。2. 在“对象资源管理器”中,展开“安全性”文件夹,并右键单击“登录名”文件夹。3. 选择“新建登录名”,在“一般”选项卡中填写登录名和密码。4. 在“服务器角色”选项卡中选择适当的服务器角色(如果需要)。5. 切换到“用户映射”选项卡,勾选要映射的数据库。6. 选择要在映射数据库中的角色。7. 完成后,单击“确定”肆渗按钮创建映射关系悄岁。注意:在创建组和数据库的映射关系时,需要分配适当的权限,以确保用裂运脊户能够执行所需的操作。此外,应定期审查组和数据库的映射关系,以确保其仍然满足安全和权限要求。

安装过程和xp没过大区别。。。

配置服务器你的说清楚,域服务器还是web服务还是文件服务器。。

百度搜索下有很多介绍,如果你太懒的话就留个信箱我把资料发给你。不然,太长,回答费劲。

WIN 2K服务器的正确安装与安全配置

作者:SharpWinnner 来自:红客大联盟()

目前,WIN 2K的服务器占据着国内服务器的大部分市场份额,但是据我们对国内WIN 2K服务器的安全性检测情况来看,WIN 2K服务器的用户以及管理员们并没有很好的掌握WIN 2K的安全配置与防范技术。现我们就尽一份对国内网络安全事业的责任,特为国内WIN 2K管理员们献上本篇文章。

一、WIN 2K操作系统的选择与正确安装

1、对硬盘进行分区

(1).通常情况下,大家安装WIN 2K操作系统的时候,习惯于把系统文件、日志文件和应用程序放置在一个分区内,而hacker的攻击通常就是利用应用程序所存在的漏洞进入系统,然后通过系统文件内的相关程序提升权限,从而来删除日志文件(防止管理员对其进行调查),对系统文件进行破坏。因此,在安装WIN 2K操作系统之前,我们必须考虑到这一点,所以我们至少需要建立两个逻辑分区,系统分区和应用程序分区。为了迷惑hacker,我们还应该更换“我的文档”和“Outlook Express”等应用程序的默认文件夹位置,让其分辨不出系统文件存放在哪个分区内。

(2).对于硬盘分区的文件系统格式,推荐使用NTFS分区。首先,NTFS分区增加了对不同文件夹设置不同访问权限的功能,从而增强了系统的安全性。建议在安装NTFS分区的时候,更好是一次性选择全部安装NTFS格式分区,而先选择安装成FAT分区,然后再进行NTFS分区转化的时候,在安装补丁情况下很容易转化不成功而导致系统崩溃。对于安装NTFS分区有一个方面是值得大家注意的,用软盘启动NTFS分区的时候,目前的大部分杀毒软件是没有对病毒进行查杀的,因此这很容易让恶性病毒的入侵,而导致系统不能正常启动。所以,请大家防患于未然,平时就做好对病毒的防范工作。

2、选择适合瞎胡自己的WIN 2K版本:

WIN 2K SERVER是微软公司出品的多语言操作系统。对于我们国人来说,可以选择安装简体中文磨大拦版或者英文版。在选择这两种语言的操作系统上,我们给大家对这两种操作系统的优劣进行分析:对于大家来说安装简体中文版的操作系统在语言上是不存在障碍的,而且安装各种基于中文的应用程序是不会存在乱码问题,比如用QQ进行交流或者安装各种网络游戏都是没有任何问题的,但是众所周知的微软的操作系统是漏洞百出的,而且中文版的操作系统漏洞远高于英文版的,再者,对于中文版的操作系统的安全漏洞补丁,一般是漏洞公布出来两周后才会出的,所以在这段期间,你要用自己的方法来防范hacker对新漏洞的攻击。仿高对于WIN 2K原版的英文操作系统,对于大家来说,首先一个就是语言存在一定的问题,其次就是对于应用程序的乱码问题,虽然有些软件能够提供中英文内码的转换,但是毕竟还是比较麻烦的。而英文操作系统是原版操作系统,微软对于其包括安全、性能、配套应用程序等各个方面都是照顾有佳。所以,根据我们的分析,普通个人用户建议使用中文操作系统,而对于企业用户,管理员们更好是安装WIN 2K英文的操作系统。

3、组件的定制:

通常情况下,默认安装WIN 2K操作系统的组件可以说是把大门向hacker敞开,不光是WIN 2K操作系统,包括LINUX/UNIX/VMS操作系统的默认安装是都能让hacker轻轻松松进入系统的。所以我们遵循安全原则“最少的服务+最小的权限=更大的安全”,我们选择一些我们能够用到的服务来进行安装。对于WEB服务器的安装,最小组件是:Internet服务管理器、WWW服务器和公用文件。如果你需要安装其它的组件,对于:Frontpage 2023服务扩展、索引服务两个组件要特别谨慎。

4、选择管理应用程序:

基于对安全和应用方面的需求,选择一个好的管理软件是必要的。WIN 2K的Terminal Service是基于RDP(远程桌面协议)的远程控制软件,这个软件在速度、使用的便捷性、操作方面都是非常不错的。但是它也有不足之处,在Terminal Service进行与真实桌面进行交互操作的时候,往往会让系统处于紊乱状态,进行错误的操作。所以,安全起见,我建议大家可以在安装一个远程控制软件来作为辅助,PcAnyWhere就是一个很好的选择。

5.选择安装顺序:

对于WIN 2K系统的安装顺序一定要注意,首先是补丁的安装,如果你安装好WIN 2K系统后,就直接打上所有的安全补丁,然后再来安装系统组件和其他应用程序,那么我可以说你的系统随时准备着遭受hacker的入侵。原因何在呢?由于补丁的安装都是替换/修改某些系统文件,如果先装补丁,后装应用程序,会把修补好的程序又重新恢复到存在漏洞的状态。再一个,就是对于接入网络的时间。我们一定要在所有的安全漏洞都弥补上的情况下再接入网络,不然系统被病毒感染或hacker入侵,并被破坏的话,我们还需要重新来恢复系统,做一些重复性的工作,等于做无用功。所以,我们要按照安装的顺序,一步一步来进行正确的安装,这样才会让系统最小程度的遭受各种破坏。WIN 2K系统正确的安装顺序应该是:

硬盘分区——选择操作系统安装——选择文件系统格式(NTFS)——选择组件及应用程序进行安装——安装各种系统补丁——安装防火墙等做好安全防范措施——接入Internet网络

二、WIN 2K服务器的安全配置

1、账号的安全管理

(1).账号的安全策略:

A.帐号尽可能少,且尽可能少用来登录;说明:网站帐号一般只用来做系统维护,多余的帐号一个也不要,因为多一个帐号就会多一份被攻破的危险。

B.除过Administrator外,有必要再增加一个属于管理员组的帐号;说明:两个管理员组的帐号,一方面防止管理员一旦忘记一个帐号的口令还有一个备用帐号;另方面,一旦hacker攻破一个帐号并更改口令,我们还有机会重新在短期内取得控制权。

C.所有帐号权限需严格控制,轻易不要给帐号以特殊权限;

D.将Administrator重命名,改为一个不易猜的名字。其他一般帐号也应尊循着一原则。说明:这样可以为hacker攻击增加一层障碍,并且能够防范克隆账号的入侵。

E.将Guest帐号禁用,同时重命名为一个复杂的名字,增加口令,并将它从Guest组删掉;说明:有的hacker工具正是利用了guest 的弱点,可以将帐号从一般用户提升到管理员组。

F.给所有用户帐号一个复杂的口令,长度最少在8位以上,且必须同时包含字母、数字、特殊字符。同时不要使用大家熟悉的单词、熟悉的键盘顺序、熟悉的数字等。说明:口令是hacker攻击的重点,口令一旦被突破也就无任何系统安全可言了,而这往往是不少网管所忽视的地方,据我们的测试,仅字母加数字的5位口令在几分钟内就会被攻破,而所推荐的方案则要安全的多。

G.口令必须定期更改(建议至少两周改一次),且更好记在心里,除此以外不要在任何地方做记录;另外,如果在日志审核中发现某个帐号被连续尝试,则必须立刻更改此帐号(包括用户名和口令);

H.在帐号属性中设立锁定次数,比如改帐号失败登录次数超过5次即锁定改帐号。这样可以防止暴力破解的尝试,同时也使管理员对该帐号提高警惕。

(2).通过注册表的修改来提高WIN 2K账号的安全性

Win2023的账号安全是另一个重点,首先,Win2023的默认安装允许任何用户通过空用户得到系统所有账号/共享列表,这个本来是为了方便局域网用户共享文件的,但是一个远程用户也可以得到你的用户列表并使用暴力法破解用户密码。

禁止139共享空连接:很多朋友都知道可以通过更改注册表Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous=1来禁止139空连接,实际上win2023的本地安全策略(如果是域服务器就是在域服务器安全和域安全策略中)就有这样的选项RestrictAnonymous(匿名连接的额外限制),这个选项有三个值:

0:无。依赖于默认许可权限

1:不允许枚举SAM帐号和共享

2:没有显式匿名权限就不允许访问

0这个值是系统默认的,什么限制都没有,远程用户可以知道你机器上所有的账号、组信息、共享目录、网络传输列表(NetServerTransportEnum等等,对服务器来说这样的设置非常危险。

1这个值是只允许非NULL用户存取SAM账号信息和共享信息。

2这个值是在win2023中才支持的,需要注意的是,如果你一旦使用了这个值,你的共享估计就全部完蛋了,所以我推荐你还是设为1比较好。

删除磁盘分区共享:运行Regedit,然后修改注册表在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters下增加一个键

Name: AutoShareServer

Type: REG_DWORD

Value: 0

然后重新启动您的服务器,磁盘分区共享去掉,但IPC共享仍存在,需每次重启后手工删除。

好了,入侵者现在没有办法拿到我们的用户列表,我们的账户安全了……慢着,至少还有一个账户是可以跑密码的,这就是系统内建的administrator,怎么办?我改改改,在计算机管理->用户账号中右击administrator然后改名,改成什么随便你,只要能记得就行了。不对不对,我都已经改了用户名了,怎么还是有人跑我管理员的密码?幸好我的密码够长,但是这也不是办法呀?嗯,那肯定是在本地或者Terminal Service的登录界面看到的,好吧,我们再来把HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\winlogon项中的Don’t Display Last User Name串数据改成1,这样系统不会自动显示上次的登录用户名。将服务器注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon项中的Don’t Display Last User Name串数据修改为1,隐藏上次登陆控制台的用户名。

2、WIN 2K服务的安全配置

(1).端口:端口是计算机和外部网络相连的逻辑接口,也是计算机的之一道屏障,端口配置正确与否直接影响到主机的安全,一般来说,仅打开你需要使用的端口会比较安全,配置的方法是在网卡属性-TCP/IP-高级-选项-TCP/IP筛选中启用TCP/IP筛选,不过对于win2023的端口过滤来说,有一个不好的特性:只能规定开哪些端口,不能规定关闭哪些端口,这样对于需要开大量端口的用户就比较痛苦。

(2).IIS:IIS是微软的组件中漏洞最多的一个,平均两三个月就要出一个漏洞,而微软的IIS默认安装又实在不敢恭维,所以IIS的配置是我们的重点,现在大家跟着我一起来:

首先,把C盘那个什么Inetpub目录彻底删掉,在D盘建一个Inetpub(要是你不放心用默认目录名也可以改一个名字,但是自己要记得)在IIS管理器中将主目录指向D:\Inetpub;其次,那个IIS安装时默认的什么scripts等虚拟目录一概删除(麻烦之源呀,还记得吗?我们虽然已经把Inetpub从系统盘挪出来了,但是还是小心为上),如果你需要什么权限的目录可以自己慢慢建,需要什么权限开什么。(特别注意写权限和执行程序的权限,没有绝对的必要千万不要给)

(3).应用程序配置:在IIS管理器中删除必须之外的任何无用映射,必须指的是ASP,ASA和其他你确实需要用到的文件类型,例如你用到stml等(使用server side include),实际上90%的主机有了上面两个映射就够了,其余的映射几乎每个都有一个凄惨的故事:htw, htr, idq,ida……想知道这些故事?去查以前的漏洞列表吧。什么?找不到在哪里删?在IIS管理器中右击主机->属性->WWW服务 编辑->主目录配置->应用程序映射,然后就开始一个个删吧(里面没有全选的)。接着在刚刚那个窗口的应用程序调试书签内将脚本错误消息改为发送文本(除非你想ASP出错的时候用户知道你的程序/网络/数据库结构)错误文本写什么?随便你喜欢,自己看着办。点击确定退出时别忘了让虚拟站点继承你设定的属性。为了对付日益增多的cgi漏洞扫描器,还有一个小技巧可以参考,在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,可以让目前绝大多数CGI漏洞扫描器失灵。其实原因很简单,大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的,例如,著名的IDQ漏洞一般都是通过取1.idq来检验,如果返回HTTP200,就认为是有这个漏洞,反之如果返回HTTP404就认为没有,如果你通过URL将HTTP404出错信息重定向到HTTP404.htm文件,那么所有的扫描无论存不存在漏洞都会返回HTTP200,90%的CGI扫描器会认为你什么漏洞都有,结果反而掩盖了你真正的漏洞,让入侵者茫然无处下手(武侠小说中常说全身漏洞反而无懈可击,难道说的就是这个境界?)不过从个人角度来说,我还是认为扎扎实实做好安全设置比这样的小技巧重要的多。最后,为了保险起见,你可以使用IIS的备份功能,将刚刚的设定全部备份下来,这样就可以随时恢复IIS的安全配置。还有,如果你怕IIS负荷过高导致服务器满负荷死机,也可以在性能中打开CPU限制,例如将IIS的更大CPU使用率限制在70%。

(4).安全日志:我遇到过这样的情况,一台主机被别人入侵了,系统管理员请我去追查凶手,我登录进去一看:安全日志是空的,倒,请记住:Win2023的默认安装是不开任何安全审核的!那么请你到本地安全策略->审核策略中打开相应的审核,推荐的审核是:

账户管理 成功 失败

登录事件 成功 失败

对象访问 失败

策略更改 成功 失败

特权使用 失败

系统事件 成功 失败

目录服务访问 失败

账户登录事件 成功 失败

审核项目少的缺点是万一你想看发现没有记录那就一点都没辙;审核项目太多不仅会占用系统资源而且会导致你根本没空去看,这样就失去了审核的意义。

与之相关的是:

在账户策略->密码策略中设定:

密码复杂性要求 启用

密码长度最小值 6位

强制密码历史 5次

最长存留期 30天

在账户策略->账户锁定策略中设定:

账户锁定 3次错误登录

锁定时间 20分钟

复位锁定计数 20分钟

同样,Terminal Service的安全日志默认也是不开的,我们可以在Terminal Service Configration(远程服务配置)-权限-高级中配置安全审核,一般来说只要记录登录、注销事件就可以了。

应用程序日志文件存放位置:c:\winnt\system32\config\AppEvent.Evt

安全日志文件存放位置:c:\winnt\system32\config\SecEvent.Evt

系统日志文件存放位置:c:\winnt\system32\config\SysEvent.Evt

(5).目录和文件权限:

为了控制好服务器上用户的权限,同时也为了预防以后可能的入侵和溢出,我们还必须非常小心地设置目录和文件的访问权限,NT的访问权限分为:读取、写入、读取及执行、修改、列目录、完全控制。在默认的情况下,大多数的文件夹对所有用户(Everyone这个组)是完全敞开的(Full Control),你需要根据应用的需要进行权限重设。

在进行权限控制时,请记住以下几个原则:

A.限是累计的:如果一个用户同时属于两个组,那么他就有了这两个组所允许的所有权限;

B.拒绝的权限要比允许的权限高(拒绝策略会先执行)如果一个用户属于一个被拒绝访问某个资源的组,那么不管其他的权限设置给他开放了多少权限,他也一定不能访问这个资源。所以请非常小心地使用拒绝,任何一个不当的拒绝都有可能造成系统无法正常运行;

C.文件权限比文件夹权限高(这个不用解释了吧?)

D.利用用户组来进行权限控制是一个成熟的系统管理员必须具有的优良习惯之一;

E.仅给用户真正需要的权限,权限的最小化原则是安全的重要保障;

(6).预防DoS:

在注册表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中更改以下值可以帮助你防御一定强度的DoS攻击

SynAttackProtect REG_DWORD 2

EnablePMTUDiscovery REG_DWORD 0

NoNameReleaseOnDemand REG_DWORD 1

EnableDeadGWDetect REG_DWORD 0

KeepAliveTime REG_DWORD 300,000

PerformRouterDiscovery REG_DWORD 0

EnableICMPRedirects REG_DWORD 0

ICMP攻击:ICMP的风暴攻击和碎片攻击也是NT主机比较头疼的攻击方法,其实应付的方法也很简单,win2023自带一个Routing & Remote Access工具,这个工具初具路由器的雏形(微软真是的,什么都要做?听说最近又要做防火墙了)在这个工具中,我们可以轻易的定义输入输出包过滤器,例如,设定输入ICMP代码255丢弃就表示丢弃所有的外来ICMP报文。

(7).ASP程序安全问题:

安全不仅是网管的事,编程人员也必须在某些安全细节上注意,养成良好的安全习惯,否则,会给hacker造成可乘之机。目前,大多数网站上的ASP程序有这样那样的安全漏洞,但如果写程序的时候注意的话,还是可以避免的。涉及用户名与口令的程序更好封装在服务器端,尽量少的在ASP文件里出现,涉及到与数据库连接地用户名与口令应给予最小的权限。

说明:用户名与口令,往往是hacker们最感兴趣的东西,如果被通过某种方式看到源代码,后果是严重的。因此要尽量减少它们在ASP文件中的出现次数。出现次数多得用户名与口令可以写在一个位置比较隐蔽的包含文件中。如果涉及到与数据库连接,理想状态下只给它以执行存储过程的权限,千万不要直接给予该用户以修改、插入、删除记录的权限。

需要经过验证的ASP页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。

说明:现在的需要经过验证的ASP程序多是在页面头部加一个判断语句,但这还不够,有可能被hacker绕过验证直接进入,因此有必要跟踪上一个页面。具体漏洞见所附漏洞文档。

防止ASP主页.inc文件泄露问题,当存在asp的主页正在制作并没有进行最后调试完成以前,可以被某些搜索引擎机动追加为搜索对象,如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件的定位,并能在浏览器中察看到数据库地点和结构的细节揭示完整的源代码。

解决方案:程序员应该在网页发布前对其进行彻底的调试;安全专家需要固定asp 包含文件以便外部的用户不能看他们。首先对 .inc文件内容进行加密,其次也可以使用 .asp 文件代替 .inc 文件使用户无法从浏览器直接观看文件的源代码。.inc文件的文件名不用使用系统默认的或者有特殊含义容易被用户猜测到的,尽量使用无规则的英文字母。

注意某些ASP编辑器会自动备份asp文件,会被下载的漏洞在有些编辑asp程序的工具,当创建或者修改一个asp文件时,编辑器自动创建一个备份文件,比如:UltraEdit就会备份一个..bak文件,如你创建或者修改了some.asp,编辑器自动生成一个叫some.asp.bak文件,如果你没有删除这个bak文件,攻击有可以直接下载some.asp.bak文件,这样some.asp的源程序就会给下载。

在处理类似留言板、BBS等输入框的ASP程序中,更好屏蔽掉HTML、JavaScript、VBScript语句,如无特殊要求,可以限定只允许输入字母与数字,屏蔽掉特殊字符。同时对输入字符的长度进行限制。而且不但在客户端进行输入合法性检查,同时要在服务器端程序中进行类似检查。

说明:输入框是hacker利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏;

如果该输入框涉及到数据查询,他们会利用特殊查询输入得到更多的数据库数据,甚至是表的全部。因此必须对输入框进行过滤。但如果为了提高效率仅在客户端进行输入合法性检查,仍有可能被绕过,因此必须在服务器端再做一次检查。

(8).PCANYWHERE的安全:

目前,PCANYWHERE是更流行的基于NT与2023的远程控制工具,同样也需要注意安全问题。建议采用单独的用户名与口令,更好采用加密手段。千万不要采用与NT管理员一样的用户名与口令,也不要使用与NT集成的口令。

说明:PCANYWHERE 口令是远程控制的之一个关口,如果与NT的一样,就失去了安全屏障。被攻破后就毫无安全可言。而如果采用单独的口令,即使攻破了PCANYWHERE,NT还有一个口令屏障。及时安装较新的版本。

4、数据库的安全

(1).ACCESS数据库的安全问题:

防止ACCESS mdb 数据库有可能被下载的漏洞,在用ACCESS做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的ACCESS数据库的路径和数据库名称,那么他能够下载这个ACCESS数据库文件,这是非常危险的。

解决方法:

A.为你的数据库文件名称起个复杂的非常规的名字,并把他放在几目录下。所谓 “非常规”, 打个比方:

比如有个数据库要保存的是有关书籍的信息, 可不要把他起个”book.mdb”的名字,起个怪怪的名称,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/ 的几层目录下,这样hacker要想通过猜的方式得到你的ACCESS数据库文件就难上加难了。

B.不要把数据库名写在程序中。有些人喜欢把DSN写在程序中,比如:

DBPath = Server.MapPath(“cmddb.mdb”)conn.Open “driver=;dbq=” & DBPath假如万一给人拿到了源程序,你的ACCESS数据库的名字就一览无余。因此建议你在ODBC里设置数据源,再在程序中这样写:

conn.open “shujiyuan”

C.使用ACCESS来为数据库文件编码及加密。首先在选取”工具->安全->加密/解密数据库,选取数据库(如:employer.mdb),然后接确定,接着会出现”数据库加密后另存为”的窗口,存为:employer1.mdb。接着employer.mdb就会被编码,然后存为employer1.mdb..要注意的是,以上的动作并不是对数据库设置密码,而只是对数据库文件加以编码,目的是为了防止他人使用别的工具来查看数据库文件的内容。

接下来我们为数据库加密,首先以打开经过编码了的 employer1.mdb,在打开时,选择”独占”方式。然后选取功能表的”工具->安全->设置数据库密码”, 接着输入密码即可。这样即使他人得到了employer1.mdb文件,没有密码他是无法看到 employer1.mdb的。

(2).SQL SERVER的安全

SQL SERVER是NT平台上用的最多的数据库系统,但是它的安全问题也必须引起重视。数据库中往往存在着最有价值的信息,一旦数据被窃后果不堪设想。

及时更新补丁程序。

说明:与NT一样,SQL SERVER的许多漏洞会由补丁程序来弥补。建议在安装补丁程序之前先在测试机器上做测试,同时提前做好目标服务器的数据备份。

给SA一个复杂的口令。

说明:SA具有对SQL SERVER数据库操作的全部权限。遗憾的是,一部分网管对数据库并不熟悉,建立数据库的工作由编程人员完成,而这部分人员往往只注重编写SQL语句本身,对SQL SERVER数据库的管理不熟悉,这样很有可能造成SA口令为空。这对数据库安全是一个严重威胁。目前具有这种隐患的站点不在少数。

严格控制数据库用户的权限,轻易不要给让用户对表有直接的查询、更改、插入、删除权限,可以通过给用户以访问视图的权限,以及只具有执行存储过程的权限。

关于不能收缩id为7的数据库中id为1的文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何应对无法收缩数据库中某一文件的问题? (不能收缩id为7的数据库中id为1的文件)