




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索1.用户创建语句 PROFILE选项“引发的血案”如果大家细心的话,在创建用户的语法中有这么一个选项“PROFILE profile”。下面是 Oracle 11gR2官方文档中关于创建用户的语法描述(较之 10g的文档可读性加强了,当然功能也同样有所增加):CREATE USER userIDENTIFIED BY password EXTERNALLY AS 'c
2、ertificate_DN' AS 'kerberos_principal_name' GLOBALLY AS ' directory_DN ' DEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace tablespace_group_name
3、QUOTA size_clause UNLIMITED ON tablespace .PROFILE profilePASSWORD EXPIREACCOUNT LOCK UNLOCK DEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace tablespace_group_name QUOTA
4、60;size_clause UNLIMITED ON tablespace .PROFILE profilePASSWORD EXPIREACCOUNT LOCK UNLOCK ENABLE EDITIONS. 2.提问:PROFILE选项是做什么用的呢?回答:简要的说,PROFILE在Oracle数据库对 数据库用户能够使用的资源做进一步的限制的一种手段,如对连接到某个用户的session或 sql所能使用的CPU资源进行控制,又如控制Oracle用户的密码
5、 管理策略等等3.查看系统的默认PROFILE1)通过dba_profiles视图查看一下系统中默认都有哪些PROFILE数据库创建以后,系统中只会存在一个名为DEFAULT的默认PROFILE,在用户创建之后,如果不做特殊指定,每个用户的PROFILE都会默认的使用个默认的PROFILE。sysora10g> select distinct profile from dba_profiles;PROFILE-DEFAULT2)全面查看一下这个PROFILE都包含哪些限制定义sysora10g> select *
6、 from dba_profiles;PROFILE RESOURCE_NAME RESOURCE LIMIT- - - -DEFAULT COMPOSITE_LIMIT
7、160; KERNEL UNLIMITEDDEFAULT SESSIONS_PER_USER KERNEL UNLIMITEDDE
8、FAULT CPU_PER_SESSION KERNEL UNLIMITEDDEFAULT CPU_PER_CALL
9、 KERNEL UNLIMITEDDEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITEDDEFAULT LOGICAL_READS_PER_CALL
10、; KERNEL UNLIMITEDDEFAULT IDLE_TIME KERNEL UNLIMITEDDEFAULT
11、 CONNECT_TIME KERNEL UNLIMITEDDEFAULT PRIVATE_SGA
12、60; KERNEL UNLIMITEDDEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10DEFAULT PASSWORD_LIFE_TIME
13、60; PASSWORD UNLIMITEDDEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITEDDEFAULT PASSWORD
14、_REUSE_MAX PASSWORD UNLIMITEDDEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULLDEFAULT PASSWORD_LOCK_TIME&
15、#160; PASSWORD UNLIMITEDDEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED16 rows selected.3)结论
16、通过上面的查看,可以得到这个系统默认的PROFILE “DEFAULT”的配置信息只对密码的错误尝试次数做了限制(最多可以错误输错10次密码),如果我们启用了PROFILE(下面有介绍如何启用和停止PROFILE),默认的限制只有这些。如果想要改变限制条件,有两种方法:第一种方法是可以对这个默认的PROFILE做个性化的调整;第二种方法是再重新定制一个新的PROFILE满足新的需求。4.对创建PROFILE的标准语法做一下“解剖麻雀”(更多细节可以参考Oracle的官方文档)1)创建PROFILE的语法如下:CREATE PROFILE profile
17、; LIMIT resource_parameters 对资源的限制 | password_parameters 对密码的限制.;2)对数据库资源做限制时,下面是全部可用的参数: SESSIONS_PER_USER 每个用户名所允许的并行会话数 | CPU_PER_SESSION 一个会话一共可以使用的CPU时间,单位是百分之一秒 | CPU_PER_CALL 一次SQL调用(解析、执行和获取
18、)允许使用的CPU时间 | CONNECT_TIME 限制会话连接时间,单位是分钟 | IDLE_TIME 允许空闲会话的时间,单位是分钟 | LOGICAL_READS_PER_SESSION 限制会话对数据块的读取,单位是块 | LOGICAL_READS_PER_CALL 限制SQL调用对数据块的读取,单位是块 | COMPOSITE_LI
19、MIT “组合打法” integer | UNLIMITED | DEFAULT | PRIVATE_SGA 限制会话在SGA中Shared Pool中私有空间的分配 size_clause | UNLIMITED | DEFAULT 3)对密码做限制时,下面是全部可用的参数: FAILED_LOGIN_ATTEMPTS 帐户被锁定之前可以错误尝试的次数 | PASSWORD_LIFE_TIME
20、; 密码可以被使用的天数,单位是天,默认值180天 | PASSWORD_REUSE_TIME 密码可重用的间隔时间(结合PASSWORD_REUSE_MAX) | PASSWORD_REUSE_MAX 密码的最大改变次数(结合PASSWORD_REUSE_TIME) | PASSWORD_LOCK_TIME 超过错误尝试次数后,用户被锁定的天数,默认1天 | PASSWORD_GRACE_TIME 当密码过期之后还
21、有多少天可以使用原密码 expr | UNLIMITED | DEFAULT | PASSWORD_VERIFY_FUNCTION function | NULL | DEFAULT 5.OK,语法已经了然于胸,那么我们来实际创建一个PROFILE(这里的名字我们称其为:sec_profile),在感性认识的同时一同探索一下在这个过程中会遇到的一些有趣现象。1)尝试创建一个混合型的PROFILE(包含 资源限制和密码限制)sysora10g> CRE
22、ATE PROFILE sec_profile LIMIT2 SESSIONS_PER_USER UNLIMITED3 CPU_PER_SESSION UNLIMITED4
23、; CPU_PER_CALL 60005 CONNECT_TIME 606 LOGICAL_R
24、EADS_PER_SESSION DEFAULT7 LOGICAL_READS_PER_CALL 60008 COMPOSITE_LIMIT 60000009 PRIVATE_SGA
25、; 66K10 FAILED_LOGIN_ATTEMPTS 611 PASSWORD_LIFE_TIME 6012
26、160; PASSWORD_REUSE_TIME 6013 PASSWORD_REUSE_MAX 514 PASSWORD_LOCK_TIME 1/2415
27、 PASSWORD_GRACE_TIME 1016 PASSWORD_VERIFY_FUNCTION verify_function17 /CREATE PROFILE sec_profile LIMIT*ERROR at line 1:ORA-07443: fu
28、nction VERIFY_FUNCTION not found2)报错原因为什么会报错?错误提示很清楚,VERIFY_FUNCTION这个函数不存在。既然知道不存在,那我们如何创建它呢?回答:VERIFY_FUNCTION函数是通过utlpwdmg.sql脚本创建的,该脚本所在的目录是$ORACLE_HOME/rdbms/admin/3)创建密码复杂性检验函数VERIFY_FUNCTION我们使用utlpwdmg.sql脚本创建以下这个VERIFY_FUNCTION密码复杂度校验函数sysora10g> ?/rdbms/admin/utlpwdm
29、g.sqlFunction created.Profile altered.4)utlpwdmg.sql脚本中的小秘密细心的您在执行utlpwdmg.sql脚本的过程中一定发现了有一个“Profile altered”的提示,难道这个脚本修改了某个PROFILE信息么?正如您所料,它修改了系统的默认PROFILE “DEFAULT”,再次查看一下现在的DEFAULT的定义信息:sysora10g> select * from dba_profiles;PROFILE RESOURCE
30、_NAME RESOURCE LIMIT- - - -DEFAULT COMPOSITE_LIMIT
31、0; KERNEL UNLIMITEDDEFAULT SESSIONS_PER_USER KERNEL UNLIMITEDDEFAULT CPU_PER_SESSION
32、 KERNEL UNLIMITEDDEFAULT CPU_PER_CALL KERNEL
33、160; UNLIMITEDDEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITEDDEFAULT LOGICAL_READS_PER_CALL KERNEL U
34、NLIMITEDDEFAULT IDLE_TIME KERNEL UNLIMITEDDEFAULT CONNECT_TIME
35、160; KERNEL UNLIMITEDDEFAULT PRIVATE_SGA
36、;KERNEL UNLIMITEDDEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3DEFAULT PASSWORD_LIFE_TIME
37、 PASSWORD 60DEFAULT PASSWORD_REUSE_TIME PASSWORD 1800DEFAULT PASSWORD_REUSE_MAX
38、; PASSWORD UNLIMITEDDEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTIONDEFAULT PASSWORD_LOCK_TIME
39、; PASSWORD .0006DEFAULT PASSWORD_GRACE_TIME PASSWORD 1016 rows selected.与系统创建时的DEFAULT PROFILE相比较,之前只有10次密码输入错误的限制,执行完成这个函数创建之后,我们发现系统默认的PROFILE已经对系统有了一个非常严格
40、的约束。也就是说现在系统上的每一个用户在默认情况下都多了这些密码方面的限制。5)验证一下新默认的PROFILE “DEFAULT”关于错误密码输入次数的限制我们模拟一下错误输错密码三次后的效果,可以看到,在第四次输入后,sec用户被锁定了。sysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to&
41、#160;ORACLE.sysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedsysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedsysora10g> conn sec/aERROR:ORA-28000: the acc
42、ount is locked6)使用dba_users视图比较一下用户的前后状态用户sec已经因错误密码输入次数超过3此导致用户被锁定了,进一步比较一下用户的状态。sysora10g> col USERNAME for a10sysora10g> col ACCOUNT_STATUS for a20sysora10g> col PROFILE for a10sysora10g> select USERNAME,A
43、CCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC'USERNAME ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE- - -
44、-SEC OPENsysora10g> select USERNAME,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC'USERNAME ACCOUNT_STATUS LOCK_DATE&
45、#160; EXPIRY_DATE- - - -SEC LOCKED(TIMED) 2009-10-11 16:05:03 2009-12-09 08:46:367)既然默认的PROFILE发生了变化,那么就会面临一个实际问题,如何恢
46、复成原始状态呢?这里给出一个比较简单的方法,就是使用ALTER PROFILE命令修改成原来的模样sysora10g> ALTER PROFILE DEFAULT LIMIT2 COMPOSITE_LIMIT UNLIMITED3 SESSIONS_PER_USER
47、60; UNLIMITED4 CPU_PER_SESSION UNLIMITED5 CPU_PER_CALL UNLIMITED6
48、 LOGICAL_READS_PER_SESSION UNLIMITED7 LOGICAL_READS_PER_CALL UNLIMITED8 IDLE_TIME UN
49、LIMITED9 CONNECT_TIME UNLIMITED10 PRIVATE_SGA UNLIMITED11 &
50、#160;FAILED_LOGIN_ATTEMPTS 1012 PASSWORD_LIFE_TIME UNLIMITED13 PASSWORD_REUSE_TIME UNLIMITED14 P
51、ASSWORD_REUSE_MAX UNLIMITED15 PASSWORD_VERIFY_FUNCTION NULL16 PASSWORD_LOCK_TIME UNLIMITED17 PASSWORD_GRACE_
52、TIME UNLIMITED18 /Profile altered.8)最后我们重新创建一下这个实验PROFILE:sec_profile,可以预测,这次一定会成功滴sysora10g> CREATE PROFILE sec_profile LIMIT2 SESSIONS_PER_USER
53、0; UNLIMITED3 CPU_PER_SESSION UNLIMITED4 CPU_PER_CALL 60005
54、 CONNECT_TIME 606 LOGICAL_READS_PER_SESSION DEFAULT7 LOGICAL_READS_PER_CALL 60008
55、60; COMPOSITE_LIMIT 60000009 PRIVATE_SGA 66K10 FAILED
56、_LOGIN_ATTEMPTS 611 PASSWORD_LIFE_TIME 6012 PASSWORD_REUSE_TIME 6013 PASSWORD_
57、REUSE_MAX 514 PASSWORD_LOCK_TIME 1/2415 PASSWORD_GRACE_TIME 1016 &
58、#160;PASSWORD_VERIFY_FUNCTION verify_function17 /Profile created.创建成功鸟在这个 实验中,我们使用了PROFILE几乎所有的参数,惟一没有包含的参数是IDLE_TIME,目的仅仅是为了说明一个细节:如果该PROFILE被授权给用户后,这个被省略的IDLE_TIME参数将继承默认PROFILE “DEFALT”中的定义。对上面我们创建的PROFILE逐行做一下诠释,以便加深理解:第 2行:对用户的并发连接会话数不做限制第 3行:对于连接到用户的每一个session的
59、CPU时间的使用不做限制第 4行:一次调用消耗的CPU时间不能超过60秒(不超过一分钟)第 5行:连接到用户的每次会话时间不能超过60分钟(不超过一个小时)第 6行:一次会话使用的物理读与逻辑读数据块总量与DEFAULT profile中定义保持一致第 7行:一次调用使用的物理读与逻辑读数据块总量不超过6000个数据块第 8行:一次会话总的资源消耗不超过6000000个服务单元(service units)第 9行:一次会话在SGA中不能分配超过66K的空间第10行:帐户被锁定之前允许6次的错误尝试第11行:超过此生命周期后密码作废第12行:密码重用时间60天第13行:密码重用之前密码需要完成
60、5次改变第14行:超过错误尝试次数后,用户将被锁定1小时第15行:当密码过期之后原密码还可以使用10天第16行:使用密码复杂度校验函数verify_function对密码做检查再单独深入解释一下第12行和13行组合搭配之后的含义:也就是说只有完成了5次的密码修改后并且已经超过60天后,之前的密码才能够再一次被使用。9)通过dba_profiles视图再一次查看一下此时系统中存在的PROFILE的信息sysora10g> col PROFILE for a12sysora10g> col RESOURCE_NAME
61、;for a25sysora10g> col LIMIT for a15sysora10g> select * from dba_profiles order by 1,2;PROFILE RESOURCE_NAME RESOURCE
62、;LIMIT- - - -DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITEDDEFAULT CONNECT_TIME
63、 KERNEL UNLIMITEDDEFAULT CPU_PER_CALL KERNEL UNLIMITEDDEFAULT CPU_PER_SESSION &
64、#160; KERNEL UNLIMITEDDEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3DEFAULT IDLE_TIME
65、; KERNEL UNLIMITEDDEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITEDDEFAULT LOGICAL_READS_PER_SESSION KERNEL
66、0;UNLIMITEDDEFAULT PASSWORD_GRACE_TIME PASSWORD 10DEFAULT PASSWORD_LIFE_TIME PASSWORD 60DEFAULT P
67、ASSWORD_LOCK_TIME PASSWORD .0006DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITEDDEFAULT PASSWORD_REUSE_TIME
68、0; PASSWORD 1800DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTIONDEFAULT PRIVATE_SGA KERNEL
69、0; UNLIMITEDDEFAULT SESSIONS_PER_USER KERNEL UNLIMITEDSEC_PROFILE COMPOSITE_LIMIT KERNEL 50
70、00000SEC_PROFILE CONNECT_TIME KERNEL 45SEC_PROFILE CPU_PER_CALL KERNEL 3000SEC
71、_PROFILE CPU_PER_SESSION KERNEL UNLIMITEDSEC_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 5SEC_PROFILE IDLE_TIME
72、60; KERNEL DEFAULTSEC_PROFILE LOGICAL_READS_PER_CALL KERNEL 1000SEC_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULTSEC_PROFILE PASSWOR
73、D_GRACE_TIME PASSWORD 10SEC_PROFILE PASSWORD_LIFE_TIME PASSWORD 60SEC_PROFILE PASSWORD_LOCK_TIME PASSWORD .0416SEC_PROFILE
74、 PASSWORD_REUSE_MAX PASSWORD 5SEC_PROFILE PASSWORD_REUSE_TIME PASSWORD 60SEC_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTIONSEC_PROFILE PR
75、IVATE_SGA KERNEL 15360SEC_PROFILE SESSIONS_PER_USER KERNEL UNLIMITED32 rows selected.10)删除PROFILE既然有创建,
76、就一定对应着删除,删除方法很简单,语法如下:DROP PROFILE profile CASCADE 如果创建的PROFILE已经授权给了具体的用户,则需要使用CASCADE选项级联的收回相应的限制信息,在收回这些限制信息之后将会以系统默认的PROFILE对该用户进行限制。删除示例如下:sysora10g> drop profile SEC_PROFILE cascade;Profile dropped.如果该PROFILE已经授权给具体的用户,使用不带有cascade选项的
77、删除命令将得到如下的报错信息:sysora10g> drop profile SEC_PROFILE;drop profile SEC_PROFILE*ERROR at line 1:ORA-02382: profile SEC_PROFILE has users assigned, cannot drop without CASCADE6.关于PROFILE内容何时生效的一点注意事项这里讨论需要谈到一个系统参数,它就是
78、resource_limit。如果要开启“资源限制”的话,这个参数必须是“TRUE”的状态sysora10g> show parameter resource_limitNAME TYPE VALUE- -
79、160;-resource_limit boolean FALSE这里有一个小细节不得不提:之所以称这个参数为resource_limit(资源限制)而没有称作“profile_limit”,是因为这个参数只对PROFILE中的资源限制部分起作用,如果是默认的FALSE状态,表示PROFILE定义中的资源限制条件不起作用,只有该参数为TRUE时,资源限制的定义才生效。不过,关于PROFILE中密码限制的条件则
80、与这个参数无关,无论这个参数设置为什么值,有关密码限制的条件都会默认生效,从这个细节上可以看出来Oracle对用户密码的重视程度。因此关于PROFILE的生效情况结论是:1)用户所有拥有的PROFILE中有关密码的限制永远生效,不受限制。2)用户所有拥有的PROFILE中有关资源的限制与resource_limit参数的设置有关,当为TRUE时生效,当为FALSE时(默认值是FALSE)无效。7.一切都OK了,最后我们来演示一下将新创建的PROFILE sec_profile指定给具体用户sec的操作sysora10g> alter user sec
81、0;profile sec_profile;User altered.sysora10g> select USERNAME,PROFILE from dba_users where USERNAME = 'SEC'USERNAME PROFILE- -SEC SEC_PROFILE8.【附】密码验证函数VERIFY_FUNCTION的创建
82、脚本内容utlpwdmg.sql,供参考。ora10gsecDB /home/oracle$ cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sqlRemRem $Header: utlpwdmg.sql 31-aug-2000.11:00:47 nireland Exp $RemRem utlpwdmg.sqlRemRem Copyright (c) Oracle Corporation 1996,
83、60;2000. All Rights Reserved.RemRem NAMERem utlpwdmg.sql - script. for Default Password Resource LimitsRemRem DESCRIPTIONRem This
84、;is a script. for enabling the password management featuresRem by setting the default password resource limits.RemRem NOTESRem This
85、file contains a function for minimum checking of passwordRem complexity. This is more of a sample function that the customerRem can use
86、 to develop the function for actual complexity checks that theRem customer wants to make on the new password.RemRem MODIFIED (MM/DD/YY)Rem
87、160; nireland 08/31/00 - Improve check for username=password. #1390553Rem nireland 06/28/00 - Fix null old password test. #1341892Rem
88、0; asurpur 04/17/97 - Fix for bug479763Rem asurpur 12/12/96 - Changing the name of password_verify_functionRem asurpur
89、; 05/30/96 - New script. for default password managementRem asurpur 05/30/96 - CreatedRem- This script. sets the default password resource parameters- Th
90、is script. needs to be run to enable the password features.- However the default resource parameters can be changed based- on the need.- A default password complexity
91、0;function is also provided.- This function makes the minimum complexity checks like- the minimum length of the password, password not same as the- username, etc. The use
92、r may enhance this function according to- the need.- This function must be created in SYS schema.- connect sys/<password> as sysdba before running the scriptCREATE OR
93、60;REPLACE FUNCTION verify_function(username varchar2,password varchar2,old_password varchar2)RETURN boolean ISn boolean;m integer;differ integer;isdigit boolean;ischar boolean;ispunct boolean;digitarray varchar2(20);punctar
94、ray varchar2(25);chararray varchar2(52);BEGINdigitarray:= '0123456789'chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'punctarray:='!"#$%&()*+,-/:;<=>?_'- Check if the password is same as
95、160;the usernameIF NLS_LOWER(password) = NLS_LOWER(username) THENraise_application_error(-20001, 'Password same as or similar to user');END IF;- Check for the minimum length of the passwo
96、rdIF length(password) < 4 THENraise_application_error(-20002, 'Password length less than 4');END IF;- Check if the password is too simple. A dictionary of words may be-
97、maintained and a check may be made so as not to allow the words- that are too simple for the password.IF NLS_LOWER(password) IN ('welcome', 'database', 'ac
98、count', 'user', 'password', 'oracle', 'computer', 'abcd') THENraise_application_error(-20002, 'Password too simple');END IF;- Check if the password contains at lea
99、st one letter, one digit and one- punctuation mark.- 1. Check for the digitisdigit:=FALSE;m := length(password);FOR i IN 1.10 LOOPFOR j IN 1.m LOOPIF substr(password,j,1) =
100、60;substr(digitarray,i,1) THENisdigit:=TRUE;GOTO findchar;END IF;END LOOP;END LOOP;IF isdigit = FALSE THENraise_application_error(-20003, 'Password should contain at least one digit, one character and&
101、#160;one punctuation');END IF;- 2. Check for the character<<findchar>>ischar:=FALSE;FOR i IN 1.length(chararray) LOOPFOR j IN 1.m LOOPIF substr(password,j,1) = substr(chararray,i,1) THENisc
102、har:=TRUE;GOTO findpunct;END IF;END LOOP;END LOOP;IF ischar = FALSE THENraise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation');END IF;- 3. Check for the punctuation<<findp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多系统萎缩的临床护理
- 2025编写房屋租赁合同范文
- 《经济计量模型分析与应用》课件
- 邵阳一中联考试卷及答案
- 山西期中考试卷及答案
- 三中一模政治试卷及答案
- 2025简单商铺租赁合同样本
- 砖瓦企业生产调度与物流管理考核试卷
- 生物能源在农业领域的应用与创新考核试卷
- 网络直播平台内容创新与监管考核试卷
- 2025届福建省多地市联考高三下学期二模物理试题(原卷版+解析版)
- 2025年传染病护理
- 2025年上半年池州市园林局招考专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 武汉市2025届高中毕业生四月调研考试 试卷与解析
- 第18课《井冈翠竹》 课件
- 质量信誉考核自评报告3篇
- 2025新外研社版英语七年级下单词默写表
- 大部分分校:地域文化形考任务二-国开(CQ)-国开期末复习资料
- 电梯维保服务投标方案
- 岩棉项目申报书_参考模板
- 施工组织设计方案交底记录
评论
0/150
提交评论