用镜头记录,用心灵体验 | 订阅本站 | 所有笔记 | 亲和力设计 | 流量

DB2 学习笔记

博客话题:DB2,Linux,Web,业余无线电,户外,摄影,截拳道,Thankpad,其他

November 2004

Linux 系统管理学习笔记(二)

Linux系统管理命令的一点拾零,这是第二部分,主要关注Linux系统安全方面。其余的笔记请到这里浏览。 正文 给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。$ chmod +t dir_name 比如一般linux发布中,/tmp目录默认被设置粘连位。$ ls -ld /tmpdrwxrwxrwt 27 root root 8192 Nov...

Linux系统管理命令的一点拾零,这是第二部分,主要关注Linux系统安全方面。其余的笔记请到这里浏览

正文

给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。

$ chmod +t dir_name

比如一般linux发布中,/tmp目录默认被设置粘连位。

$ ls -ld /tmp
drwxrwxrwt 27 root root 8192 Nov 29 23:12 /tmp

另外还有两个文件许可位,suid与sgid。设置了suid或者sgid许可位的文件在执行时,不依赖于当前执行的用户(或当前执行用户的组),而使用此文件所有者(或所有者的组)的身份来执行。
设置了suid或者sgid位的文件,相应许可位rwx中的x变为s。
使用如下命令设置设置suid位:

# chmod u+s filename
# ls -l filename
-rwsr-xr-x

使用如下命令设置sgid位:

# chmod g+s filename
# ls -l filename
-rwxr-sr-x

使用下面的命令可以列出系统中所有的suid或者sgid程序:

# $ find / \( -perm -02000 -o -perm -04000 \) -ls

定期使用命令

# grep -i 'authentication failure' /var/log/messages > failed_logins.txt

查看系统是否有未成功的登录企图是很有用的,不同的linux发布可能有不同的特征串,其中-i参数指定匹配中忽略大小写。
也可以把这个命令作为一个任务定期运行,但要注意文件的输出问题,以及定期做检查与清理工作。

可以设置一个文件为追加模式,只能加入内容,不允许删除,或者减少内容的操作,只有root能够设置这个属性。

# chattr +a filename

注意,设置了+a 的文件即使root本身也不无法修改和删除,除非使用去除属性设置:

# chattr -a filename

这个操作可以应用于系统的日志文件,这些文件正常情况下只是追加,即使root也不会有删除这些文件内容的需要,这会给已取得root权限的黑客造成一点小的障碍,延误他破坏的进程,虽然只是一小步。
设置了+s属性的文件,在删除时,会把磁盘块清零。

查看一个文件使用chattr设置的属性。

# lsattr filename 

LIDS,一个内核级的Linux入侵检测系统,可以检测到Nmap、SATAN等工具所作的半公开扫描、SYN秘密扫描、秘密FIN以及Xmas等。可讲检测到的扫描通过syslog后者email记录下来。
下载地址:http://www.lids.org
安装lids之后需要重新编译内核,再次安装并重启动linux系统。

Linux系统的日志主要分为两种类型:

  1. 进程所属日志
  2. syslog消息

前者是由用户进程或其他系统服务进程自行生成的日志,比如apache服务器的access_log与error_log日志文件。
后者是由系统syslog记录的日志,任何希望记录日志的系统进程或者用户进程都可以给调用syslog来记录日志,这是一个面对多数应用程序记录日志的通用解决方法。
一般这个消息会发送给/dev/log,然后由syslog记入日志文件。
syslogd是linux系统中默认的系统日志守护进程,可以通过/etc/syslog.conf进行配置消息的去向。如下行取自/etc/syslog.conf文件:

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Save boot messages also to boot.log
local7.* /var/log/boot.log

syslog中的功能划分如下:

  • auth 安全性/验证消息(负面)
  • authpriv 安全性/验证消息
  • cron cron 和at
  • daemon 其他系统守护进程(sshd,inetd,pppd等)
  • kern 内核消息
  • lpr 行打印子系统
  • mail 邮件子系统(sendmail,postfix,qmail等)
  • news Usenet新闻消息
  • syslog 内部syslog消息
  • user 一般用户级消息
  • uucp UUCP子系统
  • local0-local7 自定义的级别

syslog的日志级别:

  • emerg 系统以不可用
  • alert 必须马上采取行动
  • crit 危急
  • err 错误
  • warning 警告
  • notice 普通但重要的情形
  • info 通知消息
  • debug 调试消息

syslog.conf 的第一列用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别
第二列是消息的分发目标,可以有如下格式:

/path/to/filename 将消息追加到指定的文件尾,最常用
@loghost 将消息写到loghost主机上的syslog服务器
|/path/to/named_pipe 将消息写到指定的命名管道(便于外部程序过滤消息)
user1, user2 将消息写到指定的用户
* 将消息写到所有的用户
/de/console, /dev/tty1 等 将消息写到指定的终端

一个好的syslog.conf应该如下:

# Log ALL messages to /var/log/messages
# for easy scanning by log checkers
*.debug /var/log/messages

# write to terminals for really bad situations
kern,daemon.crit /dev/console
kern,daemon.crit root
*.emerg *

# Separate out other logs to be easier to read
# Debug level for more important facilities
kern.debug /var/log/kern.log
mail.debug /var/log/mail.log
daemon.debug /var/log/daemon.log
auth.debug /var/log/auth.log
syslog.debug /var/log/syslog.log
authpriv.debug /var/log/authpriv.log
fpt.debug /var/log/ftp.log

# Notice fine for others
user.notice /var/log/user.log
lpr.notice /var/log/lpr.log
news.notice /var/log/news.log
uucp.notice /var/log/uucp.log
cron.notice /var/log/cron.log
local0,local1,local2.notice /var/log/local.log
local3,local4,local5.notice /var/log/local.log
local6.notice,local7.notice /var/log/local.log

在修改了syslog.conf文件的同时,别忘了,应该把旧的日志文件归档到一个统一的目录,比如: old_log,这样可以使日志文件更清晰一些。但要注意,新的日志文件中,也使用了messages这个文件。

syslogd也可以在shell中被调用,任何验证的用户都可以通过如下调用,在日志中产生一行:

$ logger -p kern.alert -t 'su(pam_unix)' "authentication failure..."

这与一条失败验证产生的日志一模一样。而且黑客可能会大量的产生无用日志信息,用来塞满日志系统,使日志发生轮回,以清除旧的日志,或者使日志塞满,无法再记录新的日志。
因为,我们在保护日志的同时,也必须认识到,日志中的内容并不是完全可信的。

日志文件的许可设置原则:
只有root可以写入日志文件,并且只有logs组的用户才有读权限,如下

# addgroup logs
# cd /var/log
# chgrp -R logs .
# find . -type -d | xargs chmod 750
# find . -type -f | xargs chmod 640
# chmod 750 .

还需要保证/var/log 目录只有root才能写入,否则日志可以被别人删除:

# ls -ld /var/log
drwxr-xr-x 17 root root 4096 Nov 29 01:52 /var/log

一种保护日志的方式,在网络中设定一台秘密的syslog主机,把这台主机的网卡设为混杂模式,用来监听子网内所有的syslog包,这样把所有需要传送日志的主机配置为向一台不存在的主机发送日志即可。
这样即使黑客攻陷了目标主机,也无法通过syslog.conf文件找到备份日志的主机,那只是一个不存在的主机。实际操作中还可以辅以交换机的配置,以确保syslog包可以被备份日志主机上的syslog进程接受到。
比如把syslog.conf中的传送日志主机设为 @192.168.0.13,但实际网络中不存在这个日志主机,实际可能是192.168.0.250或者其他主机正在接受syslog包。

子网掩码30意味着这个子网中只有2台主机。

对于域名拥有者来讲,保存在域名中心的个人信息即是某种正当的需要,同时也暴露了很多个人的隐私,因为这些个人信息一般都填写的是真实有效的。
在unix中,通过如下命令,就可以取到这些的信息,而这对于那些打算展开社交攻击的黑客们已经足够了。

$ whois domain.com 

对于有些whois的版本,在第一次仅会查出有关这个域名的基本信息,但其中包含了用于进一步查找这个域名的服务器:

Whois Server: whois.xxxxxx.xxx

可以通过如下命令进一步查找更详细的信息:
whois domain.com@whois.xxxxxx.xxx

当前在redhat 9发布版本中所带的whois版本已经可以自动进行这种进一步查找,你只需要简单的发布一次:

$ whois domain.com

对于一个IP地址,也可以使用whois服务器查询这个IP地址被分配给了那个组织。这需要使用whois.arin.net数据库:

$ whois ip@whois.arin.net

一般会返回详细信息,包括组织的地址与电话,如果这个whois数据库不包含具体信息,一般会返回一个ReferralServer,比如:

ReferralServer: whois://whois.apnic.net

这是亚太地区的一个服务器,可以继续查询:

$ whois ip@whois.apnic.net

一般这会返回这个ip所属的组织详细信息。

touch命令可用来修改文件属性

# touch -t 200411280000.00 filename

如下命令可以用于找出2004年11月28日以后所有修改过的文件:

# touch -t 200411280000.00 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls

有关系统漏洞方面的最受推荐的一个邮件列表:

其他还有Vulnwatch和Linux Security等。

参考资源

Posted by Alex at 11:16 AM | Comments (0) | Edit | Taged: linux (38), Study notes (10), 学习笔记 (14)

awstats 日志统计工具安装

安装过程参考了车东的文章 。 在http://awstats.sourceforge.net/ 下载了项目的二进制文件包,是tgz格式,800多k。目前是6.2版本。 $ wget http://optusnet.dl.sourceforge.net/sourceforge/awstats/awstats-6.2.tgz $ gunzip -d awstats-6.2.tgz $ tar -xvf awstats-6.2.tar...

安装过程参考了车东的文章

http://awstats.sourceforge.net/ 下载了项目的二进制文件包,是tgz格式,800多k。目前是6.2版本。

$ wget http://optusnet.dl.sourceforge.net/sourceforge/awstats/awstats-6.2.tgz
$ gunzip -d awstats-6.2.tgz
$ tar -xvf awstats-6.2.tar

解出了目录 awstats-6.2

进来查看了README,觉得自动配置更让人头痛,决定手动安装,直接把 awstats-6.2/wwwroot/cgi-bin 目录copy到apache目录:/var/www/cgi-bin/

 

# mv awstats-6.2/wwwroot/cgi-bin /var/www/cgi-bin/awstats
#cd /var/www/cgi-bin/awstats


打开awstats.model.conf 进行配置

把LogFile换成自己的log地址,比如/var/logs/httpd/access.log

SiteDomain换成自己的域名:aiview.com

hostAliases中加入自己的主机别名,与原有的用空格分开

其他都不作改变,日志格式等均与现有匹配。

打开浏览器,运行http://www.aiview.com/cgi-bin/awstats/awstats.pl

报错了,403,无权限访问。
回来看一下cgi-bin下面的目录

# ls -ld /var/www/cgi-bin/awstats

目录awstats的权限位不对,更改一下

 

# chmod 755 awstats

回来浏览器再运行一次,统计的表格出来了,但数据都是空的,顶部有信息提示,需要更新一下统计信息。到shell,根据文档提示,运行

$ ./awstats.pl  -config=aiview.com -update


提示更新成功。回到浏览器再次查看,2个月的统计信息出来了,已经自动把历史日志文件(*.1, *.2...)进行合并,但关键字分析部分,中文关键字是乱码,需要更改配置文件中的编码。

安装完毕!

Posted by Alex at 2:23 PM | Comments (0) | Edit | Taged: awstats (5), log (2), 日志统计 (2)

Uncommitted Read isolation level

10:50 2004-11-23In most cases, transactions using the Uncommitted Read isolation level can read changes made to...
10:50 2004-11-23
In most cases, transactions using the Uncommitted Read isolation level can read changes made to rows by other transactions before those changes have been committed. However, such transactions can neither see nor access tables, views, or indexes created by other concurrent transactions until those transactions themselves have been terminated. The same applies to existing tables, views, or indexes that have been dropped—transactions using the Uncommitted Read isolation level will only learn that these objects no longer exist when the transaction that dropped them is terminated. There is one exception to this behavior: When a transaction running under the Uncommitted Read isolation level uses an updatable cursor, the transaction will behave as if it is running under the Cursor Stability isolation level, and the constraints of the Cursor Stability isolation level will apply.
--------------------------------------------------------------------------------



试着翻译一下:

大多数情况下,在使用“未提交读”隔离级别的事务中,可以看到其他事务中被更改但还未提交记录,但对于创建表、视图或者索引例外,在创建动作提交之前,无法看到它们当然也无法存取。同样,这适用于删除一个表、视图或者索引——所以,使用“未提交读”的事务只有在那些执行了删除动作的事务结束之后,才能发现这些表、视图或者索引已经不存在。但有一个例外的情况,当在运行于“未提交读”隔离级别的事务中使用可更新游标时,事务将被强制运行在“游标稳定”隔离级别。

中心含义就是“一个运行在未提交读隔离级别的事务,可以看到其他并发事务对数据所做的未提交修改,但无法看到它们对表、视图或者索引所做的未提交删除,直到这些并发事务被结束”。

Posted by Alex at 2:35 PM | Comments (0) | Edit | Taged: Database (12), DB2 (15), 数据库 (15), 隔离级别 (2)

在Power Designer 中应用概念模型进行数据库第一阶段设计的示例(二)

谁适合阅读本文 本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。 如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。 如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使是优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。 本文是第二部分,接上篇:在 Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一) 假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。 定义更复杂的关系...

谁适合阅读本文

本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。

如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。

如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使是优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。

本文是第二部分,接上篇:在 Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一)

假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本

定义更复杂的关系

使用依赖关系(Dependent)

还是使用上面的例子,我们假定这样的业务描述:雇员享有假期,雇员每次休假,需要记录雇员休假的起始日与结束日,假期以天为单位,一个雇员和一个开 始日唯一确定一个假期。根据这个业务描述,我们知道,对于假期而言,其必须依存于实体“Employee”而存在,即一个休假,必定有一个主体雇员。我们 在上一个模型的基础之上,添加一个实体,名称是“Holiday”,定义假期的属性开始日与结束日,这里并不需要重复定义一个雇员编号,而是替代的,使用 依赖关系,来表示实体“Holiday”依赖于实体“Employee”,关系定义如下图:

 

在实体“Holiday”中,我们需要设置开始日为主键标识符,开始日与其依赖实体中的雇员编号一起作为实体“Holiday”的标识符,用来唯一确定一个假期。这种依赖关系在概念图中表现如下:

 

从途中可以看出,在实体“Holiday”一端多了一个朝外的三角▲箭头,这个含义就是这个实体“的依赖于三角箭头所指的另外一个实体,在转化出来 的物理模型当中,实体“Employee”的empNo,在Holiday实体中不仅会作为一个外键,还同时会作为主键出现(与startData一起作 为复合主键)。

使用Dominant role

当两个实体之间的关系是1..1 时(尽管这种关系比较少见,常见于面向对象的设计方法当中,依赖实体中的主键通常与外健重合),你需要明确指定这两个实体,哪一个是父实体,哪一个是依赖实体,否则,系统在由概念模型转化为物理模型时,将不能确定需要在哪一端生成外键,这时就需要用到“Dominant role”选项,这个选项只有在1..1 的关系中才允许进行设置。我们假定这样的业务描述,企业中的部分雇员拥有一个系统帐号,并且是唯一的一个帐号,这些雇员需要保存一些额外的信息,比如帐号名称、密码等等。我们添加了一个新的实体“User”,其与雇员之间为1..1 的关系,由于一个用户帐号必定属于一个雇员,而一个雇员则可能没有用户帐号,所以我们定义实体“Employee”支配实体“User”。同时,由于 “User”依赖于“Employee”而存在,所以再定义一个由前者到后者的依赖关系,如下图:

 

Dominant role 选项中,箭头所指的实体为被支配的实体,即作为依赖实体。在模型图中,支配实体的一方会出现一个用圆括号括起来的大写字母“D”。

 

转化出来的物理模型中,表User中,empNo作为单独的主键,同时也是引用Employee表的一个外键。

处理多对多(n..n)的关系

在概念模型中,一般很少看见两个实体之间是直接的n..n 的关系,一般这种情况下我们会增加一个中间实体,在Power Designer中,提供了一个专门的符号来对应,叫做“Association”。请考虑以下的情形:

企业中拥有帐号的雇员在系统中具有不同的操作权限,这通过用户角色来进行管理,权限已经分配给了多个不同的角色,一个用户帐号至少属于一个角色,并 且可能会同时属于多个角色,一个角色可以包含0个或多个用户帐号。根据以上描述,我们添加一个实体“Role”,它与实体“User”之间是n..n 的关系,为了表达这种关系,我们增加一个“Association”并分别使用“Association Link”与其他两个实体建立关系,表示如下:

使用一个普通的实体,合理定义关系,并选择“Dependent”选项,是可以替代“Association”的,但使用 “Association”更方便、直观,使模型更容易理解,并可以减少因不谨慎而可能导致的错误。

(完)

8/23/2005 更新了下载链接

参考资源

  • 《Database Solution-A Step by Step Guide to Building Database》by Thomas M.Connolly, Carolyn E.Begg, 译者: 何玉洁,梁琦等
  • 下载第三方 Power Designer 使用教程

 

Posted by Alex at 10:55 AM | Edit | Taged: PowerDesigner (4), 数据库 (15), 概念模型 (2), 设计 (4)

在Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一)

谁适合阅读本文本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。建立一个概念模型对于数据库的设计,我们一般从概念模型开始,在概念模型设计阶段,我们着重分析数据的逻辑结构,避免陷入具体的存储细节,所有的设计都与将来所要采用的具体数据库产品无关。假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。运行程序,使用“Ctrl+N” 新建模型,在弹出的窗口中选择“Conceptual Data Model”,点击“OK”。在窗口左侧浏览器中的当前工作区节点下会新增一个概念模型,自动建立了一个默认的概念图Diagram_1,并且已经在当前工作窗口打开。一个概念模型可以拥有多个这样的概念图,可以在模型的属性中指定其中一个作为默认。工作区中有一个元件面板,包含了在概念模型中可以使用的各种符号。最常用的是:实体(Entity)和关系(Relationship),如下图:定义实体用鼠标双击实体的符号,可以进入实体的属性页。General 项目 Name:是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。在一个模型当中,实体的名字不能重复。Code:在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,当然我们现在不必为了这个实体将来叫什么而费神,一般采取与Name一致即可。Generate:默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。 Attributes 项目 窗口中下面表格里的各项很类似于一个表结构的定义,但数据类型是经过抽象化的,采用独立的表示方法,不与任何一个具体的数据库系统相关。在此项目中为当前实体添加属性。后面的三列CheckBox分别代表:M:此属性不允许为空值 P:此属性为主键标识...

谁适合阅读本文

本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。

如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。

如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。

建立一个概念模型

对于数据库的设计,我们一般从概念模型开始,在概念模型设计阶段,我们着重分析数据的逻辑结构,避免陷入具体的存储细节,所有的设计都与将来所要采用的具体数据库产品无关。

假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。运行程序,使用“Ctrl+N” 新建模型,在弹出的窗口中选择“Conceptual Data Model”,点击“OK”。

在窗口左侧浏览器中的当前工作区节点下会新增一个概念模型,自动建立了一个默认的概念图Diagram_1,并且已经在当前工作窗口打开。一个概念模型可以拥有多个这样的概念图,可以在模型的属性中指定其中一个作为默认。

工作区中有一个元件面板,包含了在概念模型中可以使用的各种符号。最常用的是:实体(Entity)和关系(Relationship),如下图:


定义实体

用鼠标双击实体的符号,可以进入实体的属性页。

  1. General 项目

    Name:是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。在一个模型当中,实体的名字不能重复。

    Code:在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,当然我们现在不必为了这个实体将来叫什么而费神,一般采取与Name一致即可。

    Generate:默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。

  2. Attributes 项目

窗口中下面表格里的各项很类似于一个表结构的定义,但数据类型是经过抽象化的,采用独立的表示方法,不与任何一个具体的数据库系统相关。

在此项目中为当前实体添加属性。

后面的三列CheckBox分别代表:

  • M:此属性不允许为空值
  • P:此属性为主键标识
  • D:为可显示属性

按“Crtl+U”呼出“定制列过滤器”的窗口,可以根据自己的喜好和实际需要选择那些列出现在窗口中,那些隐藏。使用快捷键 “Crtl+E”可以允许或者禁止当前过滤器。

我们分别重新命名了以上两个实体为部门(Department)和雇员(Employee),并分别添加了属性,如下图:

默认的,概念图只显示作为主键标识的属性,并且隐藏了数据类型。这样是为了使概念图更加简洁、易于理解,你完全可以通过选项更改这些显示配置。

定义关系

双击关系(Relationship)的符号,进入关系的属性页,在Detail项目中,我们可以对两个实体的关系进行详细的定义,如下图:

  1. General 项目

    一般最好为关系取一个贴切的名字,本例的业务关系描述如下:一个部门有多个员工,我们使用“Has”作为这个关系的名字。

    同样的我们也可以描述为:多个员工属于一个部门,可不可以使用“Belong to”作为关系名字呢?一般不推荐这样做,在概念图中有一个约定,关系的名字采用从“1,n”中“1”所在的方向向“n”所在一方进行读取的语义。本例即 “1”在部门一方,从部门一方向雇员一方读取语义,即:部门有(Has)多个员工。

  2. Detail 项目

假定对于实体部门(Department)和雇员(Employee),具有如下关系:

  • 一个部门可以有多个雇员,新成立的部门也可以暂时没有任何雇员;
  • 一个雇员必须属于一个部门,并且同时只能属于一个部门;

根据以上关系,我们修改属性页,部门-雇员的方向采用默认的0,n,雇员-部门的方向修改为强制约束(Mandatory),或者从下拉框中选择“1,1”,如下图:

最后定义完成的关系(Relationship)在概念图中表示如下:

注:在Power Designer中,关系符号靠近实体端的一个“横线”代表强制性约束,“空心圆圈”代表无强制约束,即这一方可以无对象关联;“非分岔”线代表为“1” 的关系,“分岔”线代表“多”的关系。以上四个符号共可以组合出16种关系(包含反向)。其中“多对多”的关系一般通过给出一个中间实体来进行分解,所以在许多概念图中,是看不到实际的“多对多”的关系存在的。

另外在关系的属性中还有两项:Dominant role 和Dependent,可以表示更复杂的关系,会在后面讲到。

(待续)

8/23/2005 更新了下载链接

参考资源

  • 《Database Solution-A Step by Step Guide to Building Database》by Thomas M.Connolly, Carolyn E.Begg, 译者: 何玉洁,梁琦等
  • 下载第三方 Power Designer 使用教程

 

 


Posted by Alex at 10:44 AM | Comments (0) | Edit | Taged: PowerDesigner (4), 数据库 (15), 概念模型 (2), 设计 (4)

日语的基本发音元素

正文 在日语发音中,有50个基本的发音元素,通常称为日语50音。这50个基本发音发音元素是清音,在它们基础上,还有一些变音,包括浊音、半浊音、拗音、拔音促音,以及长音和拗长音。学习日语,一般都先从这50个基本音素学起,一定要牢记。之后学习变音,也要牢记,这些基本音素和变音类似于汉语中的拼音,以及英语中的音标,每一个日语单词都可以由这些音素的发音拼出来,与汉语拼音不同的是,日语中的这些音素也会出现在日语的单词中。 针对每一个音素都有平假名和片假名之分,平假名使用在通常情况下,而片假名主要用来表示外来词。同一个音素的平假名片假名发音完全相同,只是写法有区别。 清音 日语中的50个基本发音元素(清音),共有5段、10行。   a 段 i 段 u 段 e 段 o 段...

正文

在日语发音中,有50个基本的发音元素,通常称为日语50音。这50个基本发音发音元素是清音,在它们基础上,还有一些变音,包括浊音、半浊音、拗音、拔音促音,以及长音和拗长音。学习日语,一般都先从这50个基本音素学起,一定要牢记。之后学习变音,也要牢记,这些基本音素和变音类似于汉语中的拼音,以及英语中的音标,每一个日语单词都可以由这些音素的发音拼出来,与汉语拼音不同的是,日语中的这些音素也会出现在日语的单词中。

针对每一个音素都有平假名和片假名之分,平假名使用在通常情况下,而片假名主要用来表示外来词。同一个音素的平假名片假名发音完全相同,只是写法有区别。

清音

日语中的50个基本发音元素(清音),共有5段、10行。

  a i u e o
 
a
ka
sa
ta
na
ha
ma
ya
ra
wa

在50音基础上的变音包括以下几种:

  • 浊音:浊音有4行,写法是在原假名的右上角添加两个小点: " ,以下是浊音的变化规则:
    • ‘k’浊音为‘g’
    • ‘s’浊音为‘z’
    • ‘t’浊音为‘d’
    • ‘h’浊音为‘b’,这个例外
  • 半浊音:半浊音只有一行,写法是在原假名的右上角添加一个小圆圈,只有‘ha’行有半浊音:
    • ‘h’半浊音为‘p’
  • 拗音:日语中拗音比较多,发音相对困难一些。拗音是由‘i’段的假名与‘’、‘’,‘’这三个‘ya’行的假名拼读而成,并不是所有的行都有拗音。

浊音、半浊音

以下是所有浊音和半浊音的假名,最后一行是半浊音。

  a 段 i 段 u 段 e 段 o 段

ga 行
za 行
da 行
ba 行
pa 行

拗音

以下是所有拗音的假名。

  ya yu yo

ki きゃ キャ きゅ キュ きょ キョ
si しゃ シャ しゅ シュ しょ ショ
ti ちゃ チャ ちゅ チュ ちょ チョ
ni にゃ ニャ にゅ ニュ にょ ニョ
hi ひゃ ヒャ ひゅ ヒュ ひょ ヒョ
mi みゃ ミャ みゅ ミュ みょ ミョ
ri りゃ リャ りゅ リュ りょ リョ
gi ぎゃ ギャ ぎゅ ギュ ぎょ ギョ
zi じゃ ジャ じゅ ジュ じょ ジョ
di ぢゃ ヂャ ぢゅ ヂュ ぢょ ヂョ
bi びゃ ビャ びゅ ビュ びょ ビョ
pi ぴゃ ピャ ぴゅ ピュ ぴょ ピョ

拔音和促音

拔音和促音都各有一个,拔音放在其他音素的后面用于辅助发音,发音规则类似于英语里面的鼻音‘n’,拔音发音占一个音节。

促音放在其他音素之间,遇到了促音,发音要停顿以下,占一个音节,个人感觉有些类似于英语中的双辅音中前一个辅音的失去爆破。促音的写法是右下一个小写的つ(ツ)

拔音的平假名和片假名:

促音的平假名和片假名:

长音

长音是将前面的假名发音拉长一个音节。长音的规则如下:

  • 在a段假名使用长音:
  • 在i段假名使用长音:
  • 在u段假名使用长音:い或者え
  • 在e段假名使用长音:
  • 在o段假名使用长音:
  • 所有外来词当中的长音:

此外,还有拗长音,就是前面的拗音加上长音。

 

为了将50音及其变音记熟,我为每个假名制作了一张卡片,叠起来大概一本普通书的厚度,坐车时可以随时拿出来记,很方便。把所有的假名打印到16开的纸上,每页页4个假名,然后自己用裁纸刀裁成四份即可。下载已经做好排版的日语假名pdf 文件

参考资源

Posted by Alex at 11:24 AM | Comments (0) | Edit | Taged: 日语 (3)

Alex's picture

my email address in picture

搜索|Search

订阅更新|Subscribe to Feed

按月归档|By Month

2009
07
2008
11
10
07
05
04
03
02
01
2007
12
10
07
06
05
04
03
02
01
2006
12
11
10
09
08
07
06
05
04
03
02
01
2005
11
10
09
08
07
04
03
2004
12
11
10
09
08
07
06
05
04
03
02
01
2003
12
10
09
08
06
2002
09
08
04
03
02
2001
12
09
07
06
05

我读|My Books

友情链接|links

我的链接|My Links

推荐站点|favorite sites

我的朋友|My Friends

Creative Commons License
This blog is licensed under a Creative Commons License.
Movable Type 4 Logo