end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

CGI::Cookie で複数のcookieをsetするには、list リファレンスを使用

CGI::Cookie - Interface to HTTP Cookies - metacpan.org

以下の通り

1個の場合

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>$cookie_1);
    :
}

複数個の場合

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    my $cookie_2 = CGI::Cookie->new(-name    =>  'key_2',
                                    -value   =>  'val_2',
                                    -httponly=>  1);

    
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>[$cookie_1,$cookie_2]);
    :
}

javascript? http cookie の httponly 属性を考える → 必要なcookieにのみ付けるべき

以前は、cookieのhttponly 属性に対し、うるさく言われることはありませんでしたが、 最近は、cookieのhttponly 属性を使用していない場合、セキュリティリスクの一つとして、 指摘されます。

ただ、httponly 属性のあるcookieは、javascriptから参照できなくなる為、非常に不便。

なので、必要なcookieにのみ付けるように。

以下、試した perl cgi script。

httponlyの有無により、javascriptからの参照可否を確認できます

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;
use Data::Dumper;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    my $cookie_2 = CGI::Cookie->new(-name    =>  'key_2',
                                    -value   =>  'val_2',
                                    -httponly=>  1);

    
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>[$cookie_1,$cookie_2]);
    print html_src();
}


sub html_src {

    my $html_src =<<EOF;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function get_cookie(){
  alert( 'cookie_1=' + \$.cookie('key_1') );
  alert( 'cookie_2=' + \$.cookie('key_2') );
}
</script>
</head>
<body>
<button type="button" onClick="get_cookie();">GET COOKIE</button>
</body>
</html>
EOF
}

ざっくり知的財産権 (特許権と著作権)

次のurlにある書籍をナナメ読み

Amazon CAPTCHA

知的財産権の体系

# 備考
1.1 工業所有権 特許権 技術的思考
1.2 実用新案権 技術的思考
1.3 意匠権 工業デザイン
1.4 商標権 企業ブランド
2 営業秘密 - 技術情報,顧客情報など
3 著作権 - 思想,感情の表現物

特許権著作権の違い

そもそも、特許権の保護対象は「発明」。 ここで言う「発明」とは技術的思想の発想のうち「高度」なもの(特許法2条1項)。

システム開発において、 著作権の保護対象は「ソースコード」、特許権の保護対象は「アルゴリズム」となる (著作権法10条9号)。

例えば、ソースコードをそのままのコピーすること(デッドコピー)は 著作権が禁止し、

プログラムを逆コンパイルし、アルゴリズムを真似することは、 特許権が禁止する。

知財紛争事例 - 積算くん事件 - 画面デザインの模倣

詳細はインターネットを「積算くん事件」で検索すると早いと思います。

システムの画面デザインの模倣を訴えた訴訟でしたが、 そもそも「積算くん」の画面デザインは、ありふれたもので、 創作性がなかった為、「積算くん」側の訴えは棄却されたらしい

まぁ、システム開発自体、まだまだ新しいものですので、 知財紛争においても、「これ!!」という判断基準がないはず。 他の事例も集めないといけませんね

システムの開発委託や運用委託のRPF , SLA のサンプル

ITコーディネータ協会で公開されているサンプル(pdf等)が、これまで見てきた中では、最も具体的な印象です。

https://www.itc.or.jp/foritc/useful/rfpsla/

以下、その他 参考

経産省が公開する情報システムのモデル取引・契約書

http://www.meti.go.jp/policy/it_policy/softseibi/index.html#p02_01

厚生労働省の調達仕様書案

https://www.mhlw.go.jp/sinsei/chotatu/chotatu/shiyousho-an.html

perl DBD::Oracle for centos 7.4 によるoracle dbへの接続 - 2018年版

2013年に同様のエントリを記載していますが、 先日、試したところ、手こずったので、2018年版メモ。

https://end0tknr.hateblo.jp/entry/20131122/1385095932

oracleクライアントツール群のinstall

http://www.oracle.com/technetwork/jp/topics/linuxsoft-083388-ja.html

↑こちらからダウンロードし、rpmでinstall. この部分は、ほぼ前回同様。違う点といえば、clientのversion程度.(12.1->12.2)

$ sudo rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm

oracleクライアントツール用の環境変数設定

この部分も、ほぼ前回同様。違う点といえば、clientのversionと、64bitによるpath.

ちなみに sqlplus のコマンド名も64bitで、 sqlplus64 になっていました。

$ sudo vi /etc/profile.d/oracle.sh
export ORACLE_HOME='/usr/lib/oracle/12.2/client64'
export C_INCLUDE_PATH='/usr/include/oracle/12.2/client64'
export LD_LIBRARY_PATH='/usr/lib/oracle/12.2/client64/lib'

DBD::Oracle のinstall

いつものように、「perl Makefile.PL」すると、以下のようにエラー

$ curl -LO https://cpan.metacpan.org/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.74.tar.gz
$ tar -xvf DBD-Oracle-1.74.tar.gz
$ cd DBD-Oracle-1.74
$ perl Makefile.PL 
Using DBI 1.641 (for perl 5.026002 on x86_64-linux-thread-multi) installed in /usr/local/lib/perl5/site_perl/5.26.2/x86_64-linux-thread-multi/auto/DBI/

Configuring DBD::Oracle for perl 5.026002 on linux (x86_64-linux-thread-multi)

Remember to actually *READ* the README file! Especially if you have any problems.

Installing on a linux, Ver#3.10
Using Oracle in /usr/lib/oracle/12.2/client64
DEFINE _SQLPLUS_RELEASE = "1202000100" (CHAR)
Oracle version 12.2.0.1 (12.2)

    Unable to locate an oracle.mk or other suitable *.mk
    file in your Oracle installation.  (I looked in
    /usr/lib/oracle/12.2/client64/rdbms/demo/demo_xe.mk /usr/lib/oracle/12.2/client64/rdbms/lib/oracle.mk /usr/lib/oracle/12.2/client64/rdbms/demo/oracle.mk /usr/lib/oracle/12.2/client64/rdbms/demo/demo_rdbms.mk /usr/lib/oracle/12.2/client64/rdbms/demo/demo_rdbms64.mk /usr/lib/oracle/12.2/client64/rdbms/lib/ins_rdbms.mk /usr/share/oracle/12.2/client64/demo.mk under /usr/lib/oracle/12.2/client64)

    The oracle.mk (or demo_rdbms.mk) file is part of the Oracle
    RDBMS product.  You need to build DBD::Oracle on a
    system which has one of these Oracle components installed.
    (Other *.mk files such as the env_*.mk files will not work.)
    Alternatively you can use Oracle Instant Client.

    In the unlikely event that a suitable *.mk file is installed
    somewhere non-standard you can specify where it is using the -m option:
        perl Makefile.PL -m /path/to/your.mk

    See the appropriate README file for your OS for more information and some alternatives.

なので、「-m /usr/share/oracle/12.2/client64/demo/demo.mk」オプションを追加し、 再度「perl Makefile.PL」を実行。

※ /usr/share/oracle/12.2/client64/demo/demo.mk は、先程のrpmでinstallされます

$ perl Makefile.PL -m /usr/share/oracle/12.2/client64/demo/demo.mk
$ make
$ make test
$ sudo make install

perlによるサンプルコード

前回2013年の接続方法では、接続できなかった為、connect()で与える引数を "(DESCRIPTION=(ADDRESS_LIST=..."に変更しました。

#!/usr/local/bin/perl
use strict;
use utf8;
use DBI;        #DBD::Oracle
use DBD::Oracle qw(:ora_types);
use Data::Dumper;

my $DBH;
my $DB_CONF =>
    {id_pw =>'user_id/user_pw',
     oracle=>
     join('',
          '(DESCRIPTION=',
          '(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.61.52.???)(PORT=1521)))',
          '(CONNECT_DATA=(SERVICE_NAME=???.sexy.co.jp)(SERVER=DEDICATED)))'),
    };

# $ENV{'ORACLE_HOME'} =   '/usr/lib/oracle/12.2/client64';
# $ENV{'LD_LIBRARY_PATH'}='/usr/include/oracle/12.2/client64';
# $ENV{'C_INCLUDE_PATH'}= '/usr/lib/oracle/12.2/client64/lib';
# $ENV{'nls_lang'}="JA16SJISTILDE";
# $ENV{'nls_lang'}="JA16SJIS";
# $ENV{'nls_lang'}="JAPANESE_JAPAN.UTF8"

main();

sub main {
    $DBH = connect_db();
    chk_sql_1();
    $DBH->disconnect();
}

sub chk_sql_1 {
    my $sql =<<EOF;
select * from XXXXXX_y where C_XXXXXX=?
EOF
    my $sth = $DBH->prepare($sql);
    $sth->execute('XXXXXX');
    while( my $row = $sth->fetchrow_hashref){
        print STDERR Dumper($row);
    }
}

sub connect_db {
    my $dbh = DBI->connect('dbi:Oracle:',
                           $DB_CONF->{id_pw}.'@'.$DB_CONF->{oracle},
                           '');
    return $dbh;
}

systemd による mysql自動起動は、まず、cmake時に「-DWITH_SYSTEMD=ON」オプション

https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

上記に記載されている通り、cmake時に「-DWITH_SYSTEMD=ON」オプションを追加すると scripts/mysqld.service が作成されます。

※ systemdによる自動起動方法は、次のurlをご覧下さい. https://end0tknr.hateblo.jp/entry/20180722/1532220271

※ initdによる自動起動scriptは、これまで同様、support-files/mysql.server にあります

$ cd mysql-5.7.22
$ cmake . \
   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
   -DDEFAULT_CHARSET=utf8 \
   -DDEFAULT_COLLATION=utf8_general_ci \
   -DENABLED_LOCAL_INFILE=true \
   -DWITH_INNOBASE_STORAGE_ENGINE=1 \
   -DWITH_EXTRA_CHARSETS=all \
   -DWITH_READLINE=ON \
   -DDOWNLOAD_BOOST=ON \
   -DWITH_BOOST=/home/end0tknr/tmp/boost \
   -DWITH_SYSTEMD=ON
$ make

$ cat scripts/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false

re: IPA 超上流から攻めるIT化の事例集で公開されている成果物サンプル集

種類としては豊富ですが、もう少し詳細な資料である方が、手を動かし安い気がします。 (えらそーに言ってますけど)

https://www.ipa.go.jp/sec/softwareengineering/tool/ep/index.html

https://www.ipa.go.jp/sec/softwareengineering/tool/ep/ep1.html

https://www.ipa.go.jp/sec/softwareengineering/tool/ep/ep2.html

https://www.ipa.go.jp/sec/softwareengineering/tool/ep/ep3.html

init → systemd 移行メモと、apache httpd と nginx の設定例

linux自動起動において、init → systemd 移行は避け気味で過ごしていましたが、 amazon linux2が発表され、systemd による自動起動が殆どなるので、メモ。

サービス一覧の確認

init.d systemd
chkconfig --list systemctl list-units --type=service または
systemctl list-unit-files --type=service --no-pager

以下、実行例。まずは、init.d の場合

$ /sbin/chkconfig --list
mysql.server    0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

次にsystemd.

※「SUB=exited」 は必要な処理が完了したものを表します.

※「--type=service」はservice以外に mount,automount,socket,path,device,target がありますが、 自動起動(daemon化)では気にする必要はないかと思います.

$ /usr/bin/systemctl list-units --type=service
  UNIT                       LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service             loaded active running Security Auditing Service
  crond.service              loaded active running Command Scheduler
  dbus.service               loaded active running D-Bus System Message Bus
  getty@tty1.service         loaded active running Getty on tty1
  kmod-static-nodes.service  loaded active exited  Create list of required static device no
* lvm2-monitor.service       loaded failed failed  Monitoring of LVM2 mirrors, snapshots et
* lvm2-pvscan@8:2.service    loaded failed failed  LVM2 PV scan on device 8:2
  mysql.server.service       loaded active running LSB: start and stop MySQL
* network.service            loaded failed failed  LSB: Bring up/down networking
      :                    

サービスの自動起動:登録や起動,終了,状態確認

以下の通り.

- init.d systemd
自動起動:登録 chkconfig --add sshd systemctl enable sshd
自動起動:削除 chkconfig --del sshd systemctl disable sshd
起動 service sshd start systemctl start sshd
停止 service sshd stop systemctl stop sshd
再起動 service sshd restart systemctl restart sshd
状態確認 なし? ps -efで確認? systemctl status sshd

apache httpd 2.4 の登録例

参考url

https://qiita.com/pb_tmz08/items/68a58979ca22748e8502 https://exfield.jp/View/pid:589/

$ vi /home/end0tknr/local/apache24/conf/apache24.service
[Unit]
Description=The Apache2.4 HTTP Server
After=network.target

[Service]
Type=forking
ExecStart=/home/end0tknr/local/apache24/bin/apachectl start
ExecReload=/home/end0tknr/local/apache24/bin/apachectl restart
ExecStop=/home/end0tknr/local/apache24/bin/apachectl stop

User=root
Group=root

# KillMode=???
# PIDFile=???
# EnvironmentFile=/usr/local/etc/apache/env.sh (ExecStartでのみ有効?)
# Environment=    ## 個別に定義する場合

[Install]
WantedBy=multi-user.target  # = run level

# 以下で /etc/systemd/system/ 以下に ln -s されます 
$ sudo systemctl enable /home/end0tknr/local/apache24/conf/apache24.service
$ sudo systemctl start apache24.service
$ sudo systemctl status apache24.service
$ sudo systemctl stop apache24.service

nginx の登録例

本家 www.nginx.com で紹介されていますので、以下をご覧下さい

https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

selenium + python3 + ie driver で自動ログイン

先程のエントリのおまけ。IEで自動ログイン。

srcは以下の通りですが、IEの場合、seleniumで動作させる為の設定がやや手間

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import getopt
import sys
from selenium import webdriver
from time import sleep
import unittest  # https://docs.python.jp/3/library/unittest.html

CONF = \
    {'web_driver':'c:/home/end0tknr/tmp/SELENIUM/IEDriverServer.exe',
     'id':'foofoo',
     'pw':'hogehoge'}

class TestSample(unittest.TestCase):
    def setUp(self):    # test前の準備
        self.browser = webdriver.Ie(CONF['web_driver'])
    
    def tearDown(self): # test後の後始末
        self.browser.quit();

    def test_login(self):
        self.browser.get("https://hogehoge.co.jp/contents/browse.pl?cid=51571")
        login_id_form = self.browser.find_element_by_id('credential_0')
        login_id_form.send_keys(CONF['id'])
        login_pw_form = self.browser.find_element_by_id('credential_1')
        login_pw_form.send_keys(CONF['pw'])
        login_btn =     self.browser.find_element_by_id('loginBtFrame')
        self.browser.execute_script("IdPassword.login(); return false")
        sleep(3)
        self.assertEqual(self.browser.current_url,
                         'https://login.hogehoge.co.jp/image')

    
if __name__ == '__main__':
    unittest.main(verbosity=2)

selenium + python3 + chrome driver でfileの自動保存

IEにおいては、selenium単体では難しいらしく、

Firefox(geckodriver)においては、ダウンロード後にブラウザを操作できなくなり (インターネットではダウンロードできるような情報がありましたが、私の環境ではNG)

結局、chromedriverで次のように書きました。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import getopt
import os
import sys
from selenium import webdriver
import unittest  # https://docs.python.jp/3/library/unittest.html
from time import sleep

CONF = {}

class TestSample(unittest.TestCase):

    def setUp(self):    # test前の準備
        chopt = webdriver.ChromeOptions()
        # chromeのviewerで開かず、現在のdirに保存
        prefs = {"download.default_directory" : os.getcwd(),
                 "download.prompt_for_download": False,
                 "download.directory_upgrade": True,
                 "plugins.plugins_disabled": ["Chrome PDF Viewer"],
                 "plugins.always_open_pdf_externally": True}
        chopt.add_experimental_option("prefs",prefs)
        # SSLエラー対策らしい
        chopt.add_argument('--ignore-certificate-errors')
        chopt.add_argument("--disable-extensions")
        chopt.add_argument("--disable-print-preview")

        self.browser = webdriver.Chrome(chrome_options = chopt)
    
    def tearDown(self): # test後の後始末
        self.browser.quit();
    
    def test_1(self):
        self.browser.get("http://cent7.a5.jp/hogehoge/foo.pdf")
        self.browser.get("http://www.yahoo.co.jp")

if __name__ == '__main__':
    unittest.main(verbosity=2)

rappid - Create Flowchart, BPMN and many other unique diagramming editors with ease. html5

html5 + javascript (js)で、ここまでできるんですね。 いいかも

Rappid: Powerful visual tools at your fingertips

whoisとopensslコマンドで、dnsやssl証明書の有効期限を確認

当初、perl moduleでの実装を検討しましたが、 whoisとopensslコマンドの利用が、お手軽のようです。

#!/usr/local/bin/perl
use strict;
use warnings;
use DateTime::Format::Strptime;
use Data::Dumper;

my @HOSTNAMES =
    qw/
       www.xxx-xxx.com
       www.yyy-yyy.co.jp
       www.zzz-zzz.jp
      /;
my $TLDS =
    {"" =>['.com', '.org', '.net'],
     "whois.jprs.jp" =>['.co.jp', '.gr.jp', '.ne.jp', '.or.jp','.jp']};

my $TIMEOUT = 10;
my $SSL_PORT = 443;
my $WHOIS_CMD = '/usr/bin/whois';
my $OPENSSL_CMD = '/usr/local/bin/openssl';

main();

sub main {
    print join("\t",
               sprintf("%-36s","HOSTNAME"),
               "DNS_DATE_Fr","DNS_DATE_To",
               "SSL_DATE_Fr","SSL_DATE_To"),"\n";
    
    for my $hostname ( @HOSTNAMES ){
        my $dns_expire_date = get_whois_expire($hostname);
        my $ssl_expire_date = get_ssl_expire( $hostname );

        print join("\t",
                   sprintf("%-36s",$hostname),
                   @$dns_expire_date,
                   @$ssl_expire_date),"\n";
    }
}

sub get_whois_expire {
    my ($hostname) = @_;
    my ($domain_tmp,$whois_host) = extract_domain($hostname);

    my $cmd;
    if( $whois_host ){
        $cmd = "$WHOIS_CMD -h $whois_host $domain_tmp |";
    } else {
        $cmd = "$WHOIS_CMD $domain_tmp |";
    }

    my @ret_lines;
    eval{
        open my $fh , $cmd or die "fail open $cmd $!";
        @ret_lines = <$fh>;
        close($fh) or die "fail close $cmd $!";
    };

    my $strp_1 = DateTime::Format::Strptime->new(pattern => "%Y-%m-%d");
    my $strp_2 = DateTime::Format::Strptime->new(pattern => "%Y/%m/%d");
    my $ret_date = ['xxxx-xx-xx','xxxx-xx-xx'];
    
    for my $ret_line ( @ret_lines ){
        if( $ret_line =~ /Updated Date: (.+)/o ){
            $ret_date->[0] =$strp_1->parse_datetime($1)->ymd;
            next;
        }
        if( $ret_line =~ /Registry Expiry Date: (.+)/o ){
            $ret_date->[1] =$strp_1->parse_datetime($1)->ymd;
            next;
        }

        if( $ret_line =~ /\[Last Update?d?\]\s+([^\s]+)/o ){
            $ret_date->[0] =$strp_2->parse_datetime($1)->ymd;
            next;
        }
        if( $ret_line =~ /\[State\]\s+Connected\s+\(([^\s]+)\)/o or
            $ret_line =~ /\[Expires on\]\s+([^\s]+)/o ){
            $ret_date->[1] =$strp_2->parse_datetime($1)->ymd;
            next;
        }
    }
    return $ret_date;
}


sub extract_domain {
    my ($hostname) = @_;

    for my $whois_host ( sort keys %$TLDS ){
        for my $tld ( @{$TLDS->{$whois_host}} ){
            if( $hostname =~ /([^\.]+)$tld$/i ){
                return ($1 . $tld, $whois_host);
            }
        }
    }
    return ("","");
}


sub get_ssl_expire {
    my ($host) = @_;

    my $cmd = join(" ",
                   "echo |",
                   "$OPENSSL_CMD s_client -connect $host:$SSL_PORT -showcerts",
                   "2> /dev/null | ",
                   "$OPENSSL_CMD x509 -dates -noout 2> /dev/null |");
    my @ret_lines;
    my $ret_date = ['xxxx-xx-xx','xxxx-xx-xx'];
    eval{
        open my $fh , $cmd or die "fail open $cmd $!";
        @ret_lines = <$fh>;
        close($fh) or die "fail close $cmd $!";
    };
    return $ret_date if $@;

    my $strp = DateTime::Format::Strptime->new(pattern => "%b %d %T %Y %Z");

    for my $response_line ( @ret_lines ){
        if( $response_line =~ /^notBefore\=(.+)/o ){
            $ret_date->[0] = $strp->parse_datetime($1)->ymd;
            next;
        }
        if( $response_line =~ /^notAfter\=(.+)/o ){
            $ret_date->[1] = $strp->parse_datetime($1)->ymd;
            next;
        }
    }
    return $ret_date;
}

システム評価指標 RASISの再整理 - R:信頼性, A:可用性, S:保守性, I:保全性, S:機密性

きっかけは、一般的な意味での「保全」とRASISにおける「保全」の違い

一般的に「保守」や「保全」と言うと、「保守=正常な状態を保つこと」と 「保全=安全な状態に保つこと」の意味で使われていると思います。

一方、RASISにおいては、「保全=データに矛盾がなく一貫性を保つ」と 定義されているので、注意が必要です。

このことが議論しているメンバーの中でずれており、 議論にならなかったので、以下のように再整理

システム評価指標を表す RASIS .

英語 日本語 概要や例
Reliability 信頼性 故障しにくさ. ≒MTBF
Availability 可用性 稼働率 = MTBF/(MTBF+MTTR)
Serviceability 保守性 MTTR
Integrity 保全 データに矛盾がなく一貫性がある
Security 機密性 不正アクセスしにくい

oracle 11.2.0 for win へ データインポート

内容は理解できていませんが、メモ

STEP1/3 DBスペース作成

SQL Plusに system または sys as dba (※)でログインし、以下を実行

SQL> CREATE TABLESPACE JSMAP DATAFILE 'c:\app\Administrator\oradata\JSMAP.dbf'
            SIZE 5000M;

※ STEP2/3 system や sys は、oracleでdefaultからあるユーザ

DB接続用ユーザ作成と権限付与

やはり SQL Plusに system または sys as dba でログインし、以下を実行。

oracleは殆ど使用したことがない為、grant文の内容は全く理解していません

SQL> create user ENQ identified by enq
       default tablespace JSMAP
       temporary tablespace TEMP;
SQL> grant DBA TO ENQ;
SQL> grant ALTER SYTEM TO ENQ;
SQL> grant connect,resource to ENQ;
SQL> grant unlimited tablespace to ENQ;
SQL> grant alter rollback segment to ENQ;
SQL> grant CREATE DATABASE LINK to ENQ;
SQL> grant CREATE TABLE to ENQ;
SQL> grant EXECUTE ON DBMS_OUTPUT to ENQ;
SQL> grant EXECUTE ON DBMS_PIPE to ENQ;
SQL> grant EXECUTE ON DBMS_SQL to ENQ;
SQL> grant SELECT ANY TABLE TO ENQ;
SQL> grant EXECUTE ON DBMS_ALERT TO ENQ;

STEP3/3 インポート実行

以下を、DOS or PowerShellより実行

DOS> cd C:\app\Administrator\prodct\11.2.0\dbhome_1\BIN
DOS> imp ENQ/enq file=c:\TEMP\ENQ.dmp log=ENQ.log buffer=10485760

(参考)インポート時のログ抜粋

最初「CREATE TABLESPACE」で指定したサイズが小さかった為か、 途中で、エラー? 警告?が表示されましたが、imp処理は完了しました。

今後、詳細を調べるかもしれませんので、参考として貼っておきます

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

エクスポート・ファイルはEXPORT:V10.02.01によって従来型パス経由で作成されました
JA16SJISTILDEキャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでインポートを実行します   
エクスポート・クライアントではJA16SJISキャラクタ・セットを使用します(キャラクタ・セットの変換可能)。
. ENQのオブジェクトをENQにインポートしています
. . 表                      "AIASCVT"をインポートしています      13479行インポートされました。
. . 表                     "AIBSYCVT"をインポートしています        541行インポートされました。
  :                               :                                   :
. . 表                     "ATAKTCSD"をインポートしています   22091808行インポートされました。
IMP-00017: 次の文は、Oracleエラー1659で失敗しました:
 "CREATE INDEX "IDX_AKTCSD_01" ON "ATAKTCSD" ("C_SITEN" , "C_HANSYA" , "C_TEI"
 "" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 704643072 FREELISTS"
 " 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "JSMAP" NOLOGGING"
IMP-00003: Oracleエラー1659が発生しました。
ORA-01659: 6を超えるMINEXTENTSを表領域JSMAPに割当てできません。
IMP-00017: 次の文は、Oracleエラー20000で失敗しました:
 "BEGIN  DBMS_STATS.SET_INDEX_STATS(NULL,'"IDX_AKTCSD_01"',NULL,NULL,NULL,213"
 "87816,77929,99318,1,3,329983,2,0); END;"
IMP-00003: Oracleエラー20000が発生しました。
ORA-20000: INDEX "ENQ"."IDX_AKTCSD_01" does not exist or insufficient privileges
ORA-06512: "SYS.DBMS_STATS", 行3007
ORA-06512: "SYS.DBMS_STATS", 行7865
ORA-06512: 行1
IMP-00017: 次の文は、Oracleエラー1659で失敗しました:
 "CREATE INDEX "IDX_AKTCSD_02" ON "ATAKTCSD" ("C_TEI" )  PCTFREE 10 INITRANS "
 "2 MAXTRANS 255 STORAGE(INITIAL 486539264 FREELISTS 1 FREELIST GROUPS 1 BUFF"
 "ER_POOL DEFAULT) TABLESPACE "JSMAP" NOLOGGING"
IMP-00003: Oracleエラー1659が発生しました。
ORA-01659: 6を超えるMINEXTENTSを表領域JSMAPに割当てできません。
IMP-00017: 次の文は、Oracleエラー20000で失敗しました:
 "BEGIN  DBMS_STATS.SET_INDEX_STATS(NULL,'"IDX_AKTCSD_02"',NULL,NULL,NULL,213"
 "87816,53739,99318,1,3,329983,2,0); END;"
IMP-00003: Oracleエラー20000が発生しました。
ORA-20000: INDEX "ENQ"."IDX_AKTCSD_02" does not exist or insufficient privileges
ORA-06512: "SYS.DBMS_STATS", 行3007
ORA-06512: "SYS.DBMS_STATS", 行7865
ORA-06512: 行1
IMP-00017: 次の文は、Oracleエラー1659で失敗しました:
 "CREATE INDEX "IDX_AKTCSD_03" ON "ATAKTCSD" ("C_AKTSYU" , "C_AKTVER" , "C_AK"
 "TEDB" , "N_SETSMN" , "N_KOUMOK" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORA"
 "GE(INITIAL 754974720 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TAB"
 "LESPACE "JSMAP" NOLOGGING"
IMP-00003: Oracleエラー1659が発生しました。
ORA-01659: 6を超えるMINEXTENTSを表領域JSMAPに割当てできません。
IMP-00017: 次の文は、Oracleエラー20000で失敗しました:
 "BEGIN  DBMS_STATS.SET_INDEX_STATS(NULL,'"IDX_AKTCSD_03"',NULL,NULL,NULL,213"
 "87816,86591,334,259,63598,21241754,3,0); END;"
IMP-00003: Oracleエラー20000が発生しました。
ORA-20000: INDEX "ENQ"."IDX_AKTCSD_03" does not exist or insufficient privileges
ORA-06512: "SYS.DBMS_STATS", 行3007
ORA-06512: "SYS.DBMS_STATS", 行7865
ORA-06512: 行1
. . 表           "ATAKTCSD_AA_141106"をインポートしています        425行インポートされました。
  :                           : 
. . 表                     "ATAKTRFD"をインポートしています
IMP-00058: Oracleエラー1659が発生しました。
ORA-01659: 1を超えるMINEXTENTSを表領域JSMAPに割当てできません。
. . 表              "ATAKTRFD_130213"をインポートしています        256行インポートされました。
. . 表                     "ATTEI10Y"をインポートしています
. . 表                     "ATTEIKER"をインポートしています          3行インポートされました。
IMP-00017: 次の文は、Oracleエラー1658で失敗しました:
 "CREATE UNIQUE INDEX "ATTEIKER_P" ON "ATTEIKER" ("C_JSMSTN" , "C_JSMHAN" , ""
 "C_TEI" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 FREELIST"
 "S 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "JSMAP" NOLOGGING"
IMP-00003: Oracleエラー1658が発生しました。
ORA-01658: 表領域JSMAPにセグメント用のINITIALエクステントを作成できません。
IMP-00017: 次の文は、Oracleエラー20000で失敗しました:
 "BEGIN  DBMS_STATS.SET_INDEX_STATS(NULL,'"ATTEIKER_P"',NULL,NULL,NULL,3,1,3,"
 "1,1,2,0,0); END;"
IMP-00003: Oracleエラー20000が発生しました。
ORA-20000: INDEX "ENQ"."ATTEIKER_P" does not exist or insufficient privileges
ORA-06512: "SYS.DBMS_STATS", 行3007
ORA-06512: "SYS.DBMS_STATS", 行7865
ORA-06512: 行1
IMP-00017: 次の文は、Oracleエラー1658で失敗しました:
 "ALTER TABLE "ATTEIKER" ADD  CONSTRAINT "ATTEIKER_P" PRIMARY KEY ("C_JSMSTN""
 ", "C_JSMHAN", "C_TEI") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORA"
 "GE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESP"
 "ACE "JSMAP" NOLOGGING ENABLE "
IMP-00003: Oracleエラー1658が発生しました。
ORA-01658: 表領域JSMAPにセグメント用のINITIALエクステントを作成できません。
. . 表                     "ATTEINER"をインポートしています          0行インポートされました。
. . 表                     "ATTEINYK"をインポートしています
ORA-01658: 表領域JSMAPにセグメント用のINITIALエクステントを作成できません。
. . 表             "WORK_CNG_SOSHIKI"をインポートしています
IMP-00058: Oracleエラー1658が発生しました。
ORA-01658: 表領域JSMAPにセグメント用のINITIALエクステントを作成できません。
IMP-00041: 警告: オブジェクト作成の際、コンパイル・エラーが発生しました。
 "CREATE FORCE VIEW "ENQ"."AVTEIJSM"                             ("C_SITEN",""
 "C_HANSYA","C_TEI","C_TEIK","S_TEI","C_RENMEIK","S_RENMEI","K_KEIYAK","C_KEN"
 "TYP","C_SYOTYP","N_UNIT","N_UNIT1F","N_YKAMEN","N_KENMEN","N_KAISUU","K_FIN"
 "EUP","C_SYOYUU","K_TAKTEN","K_TYKHDN","C_GAIHEK","K_HINKAK","K_DENKA","N_TY"
 "KHDN","K_HINKOU","C_KYUTOU","N_TINTAI","K_KUKKBO","K_IKAN","K_IKANSK","C_IK"
 "ANSK","D_KEIYAK","D_SUEYOT","D_SUEJIS","D_HONYOT","D_HONURI","D_ZOUYOT","D_"
 "ZOUURI","C_EIGTNT","C_KEITNT","C_JISTNT","C_KOJTNT","C_KANTNT","C_KENTNT",""
 "C_INTTNT","C_EXTTNT","K_CANCEL","D_CANNIN","C_CANRIY","C_HORYUU","D_HRYTRK""
 ","C_HRRIY1","N_TMNKNJ","D_TMNJIS","C_TRHKSK","K_IMPORT","C_GENSTN","C_GENTR"
 "H","C_GENHAN","N_COUNT") AS "
 "SELECT juta.ctteikhn.c_siten   AS c_siten"
 "     , juta.ctteikhn.c_hansya  AS c_hansya"
 "     , juta.ctteikhn.c_tei     AS c_tei"
             :
 "     , enq.amjsmimp.c_genhan   AS c_genhan"
 "     , (SELECT COUNT(ctteikhn_count.ROWID)"
 "        FROM   juta.ctteikhn ctteikhn_count"
 "             , enq.amjsmimp amjsmimp_count"
 "        WHERE  ctteikhn_count.c_hansya = amjsmimp_count.c_trhksk"
 "           AND amjsmimp_count.c_genstn = enq.amjsmimp.c_genstn"
 "           AND amjsmimp_count.c_genhan = enq.amjsmimp.c_genhan"
 "           AND ctteikhn_count.c_tei    = juta.ctteikhn.c_tei"
 "           AND ctteikhn_count.c_hansya <= juta.ctteikhn.c_hansya) AS n_coun"
 "t"
 "FROM   juta.ctteikhn"
 "     , enq.amjsmimp"
 "WHERE  juta.ctteikhn.c_hansya = enq.amjsmimp.c_trhksk  (+) "
IMP-00003: Oracleエラー4043が発生しました。
ORA-04043: オブジェクトZFPZ001Bは存在しません。
制約の有効化について...
インポートは正常に終了しましたが、警告が発生しました。