2018-02-28

Oracle 12c SCOTTユーザーの権限を確認する

前の記事「Oracle CONNECTおよびRESOURCEロールのまとめ」を書いていて、ふと気になったのですが、サンプル・スキーマのSCOTTユーザーの権限ははどうなっているのでしょうか。

SCOTTユーザーの権限は非推奨の CONNECTロールとRESOURCE ロールを使用していたはずです。Oracle12c では非推奨なので使われなくなっているのでしょうか。

サンプルスキーマの作成スクリプト ORACLE_HOME/rdbms/admin/utlsampl.sql を見ると、

GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY tiger;

となっていました。

まだ、非推奨の RESOURCE ロールと CONNECT ロールが使われているようですね。
また、12c から RESOURCE ロールでは付与されなくなったUNLIMITED TABLESPACE 権限が別に付与されています。コメントに、

Rem mmoore 04/08/91 - use unlimited tablespace priv

と記載されていますので、だいぶ昔から RESOURCE ロールとは別に付与されていたようです。


データディクショナリで確認してみます。

SQL> select * from user_role_privs;

GRANTEE    GRANTED_ROLE
---------- -------------
SCOTT      RESOURCE
SCOTT      CONNECT
SQL> select * from user_sys_privs;

USERNAME  PRIVILEGE            
--------- ---------------------
SCOTT     UNLIMITED TABLESPACE


現セッションで利用できる権限を見てみます。

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
SET CONTAINER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE TYPE
CREATE TRIGGER
CREATE PROCEDURE
CREATE SEQUENCE
CREATE CLUSTER
CREATE TABLE
UNLIMITED TABLESPACE
CREATE SESSION

昔、CONNECT ロールに付与されていた

  • ALTER SESSION
  • CREATE DATABASE LINK
  • CREATE SYNONYM
  • CREATE VIEW

は付与されてないですね。

非CDB環境で確認しているのですが、非CDBでは必要ないはずのコンテナの切替権限 SET CONTAINER が付与されています。
CONNECT ロールに新たに付与されているようです。

SQL> select * from role_sys_privs where ROLE = 'CONNECT';
ROLE                    PRIVILEGE
-------------------- --------------
CONNECT             SET CONTAINER
CONNECT             CREATE SESSION

2018-02-23

Oracle CONNECTおよびRESOURCEロールのまとめ

Oracle Database 10g R2 から「最低限の権限」原則により CONNECT および RESOURCE ロールは非推奨となった。

Oracle Database セキュリティ・ガイド 10gリリース2(10.2)- 認可: 権限、ロール、プロファイルおよびリソースの制限

注意:
CONNECTおよびRESOURCEロールは、将来のOracle Databaseのリリースで非推奨になる予定のため、使用しないでください。 CONNECTロールが現在保持している権限は、CREATE SESSIONのみです。

なお、非推奨ではあるものの Oracle 12g R2 でも CONNECTおよびRESOURCEロールは事前定義されている。

Oracle® Databaseセキュリティ・ガイド 12cリリース2 (12.2) - Oracle Databaseのインストールで事前に定義されているロール

CONNECTロール

前述の引用にもあるとおり 10g R2 からCONNECT ロールの権限は CREATE SESSION のみになったが、それ以前は以下の権限が付与されていた。

Oracle Database セキュリティ・ガイド 10gリリース2(10.2)- CONNECTロール変更への対処

  • ALTER SESSION
  • CREATE CLUSTER
  • CREATE DATABASE LINK
  • CREATE SEQUENCE
  • CREATE SESSION
  • CREATE SYNONYM
  • CREATE TABLE
  • CREATE VIEW

Oracle 12c から CONNECT ロールに新たに SET CONTAINER 権限が付与されているようです。

RESOURCEロール

RESOURECE ロールに付与されている権限は以下のとおり。

Oracle® Databaseセキュリティ・ガイド 12cリリース2 (12.2) - Oracle Databaseのインストールで事前に定義されているロール

  • CREATE CLUSTER
  • CREATE INDEXTYPE
  • CREATE OPERATOR
  • CREATE PROCEDURE
  • CREATE SEQUENCE
  • CREATE TABLE
  • CREATE TRIGGER
  • CREATE TYPE

Oracle 12c R1 から RESOUCEロールは UNLIMITED TABLESPACE 権限を付与しなくなった。

Oracle® Databaseセキュリティ・ガイド 12cリリース1 (12.1) - Oracle Databaseセキュリティ・ガイドのこのリリースの変更

このリリース以降、RESOURCEロールがデフォルトでUNLIMITED TABLESPACEシステム権限を付与しなくなりました。このシステム権限をユーザーに付与する場合、手動で付与する必要があります。

なお、 UNLIMITED TABLESPACE はロールに付与することはできないので以下のように直接ユーザに付与する。

GRANT UNLIMITED TABLESPACE TO username;

参考

2018-02-13

Windows Server のシステムパーティション(Cドライブ)容量

Windows Server セットアップ時(仮想化環境でない場合)にシステムパーティション(Cドライブ)にどの程度の容量を割り当てるか悩ましいですね。

少々古い記事ですが、Microsoft のブログで “How big should my OS drive be?” という記事が掲載されているので紹介しておきます。

How big should my OS drive be? | Ask the Core Team

Microsoft Enterprise Platforms Support: Windows Server Core Team

こちらの記事では、

  1. 3 x RAM
  2. 10 -12GB ベースOS(役割・機能による)
  3. 10GB アップデート
  4. 10GB その他
  5. +インストールするアプリケーションの容量

の容量を確保することを提案しています。

アプリケーションを除き、RAM 16 GB だと 80GB 、32 GB だと 128 GB になります。
(元記事では (2) を 11 GB で計算して 127 GB になっています。)

記事の執筆時点(2015年10月)で想定していたと思われる Windows Server 2012R2 のOSのサイズは Server Core で 6.4 GB、GUI 使用サーバーで 9.2 GB でした。
Windows Server 2016 では Server Core で 10.3 GB、デスクトップ エクスペリエンスで 15.2 GB に肥大化しています。Windows Server 2016 の場合、その分を加味した方が良いかと思います。

ベンダーの初期パーティション

各ベンダーのプレインストールモデルの初期パーティション容量はどの程度になっているのでしょうか。
ざっと見た感じでは、80 GB や 100 GB で構成されているケースが多いようです。
環境次第ですが、80 GB は少し余裕がないかもしれないですね。

2018-02-06

Display Post Titles in Blogger Page Navigation

Blogger’s page navigation at the bottom of the page displays just “Newer Post” and “Older Post”. It is preferable to show the actual page title instead of them.

I’d searched solutions satisfying the following conditions.

  1. Getting page titles from the blog feeds without loading another page.
    Loading another page is counted as a page visit and skew the stats.
  2. Simple JavaScript snippet (w/o jQuery as possible).
    I want to just overwrite link text by the information of link destination. It should be simple.

Firstly, I found MS-potilas’ post.

It seems nice, but somewhat in a roundabout way, it extracts page titles using publishing dates.

Next, I investigate about the Blogger’s feed specification, and I found that the blog feeds are provided by the Blogger Data API.

Blogger Data API supports “retrieving a post by its path”, so we can get a post information including title by specifying path parameter.

Then, I could write a simple JavaScript (w/o jQuery), which rewrite the link text, Newer / Older Post, to their own title.

JavaScript

Insert this snippet just before </body> in Edit HTML.

<script type='text/javascript'>
//<![CDATA[
// except root, labels, search and mobile pages
if (/.+\.html(\?m=0)?$/.test(location.href)) {
  var olderLink = document.getElementById('Blog1_blog-pager-older-link');
  if (olderLink) {
    getPageTitle(olderLink, setOlderPageTitle);
    function setOlderPageTitle(data){
      setPageTitle(data, olderLink, '', ' &#187;')
    };
  }
  var newerLink = document.getElementById('Blog1_blog-pager-newer-link');
  if (newerLink) {
    getPageTitle(newerLink, setNewerPageTitle);
    function setNewerPageTitle(data){
      setPageTitle(data, newerLink, '&#171; ', '')
    };
  }
  // set the page title from feed data
  function setPageTitle(data, pageLink, prefix, suffix) {
    if (data.feed.entry) {
      if (data.feed.entry.length > 0) {
        var title = data.feed.entry[0].title.$t;
      }
    }
    if (title) {
      pageLink.innerHTML = prefix + title + suffix;
    }
  }
  // get entry data from the feed
  function getPageTitle(pageLink, callback) {
      var pathname = pageLink.getAttribute('href').replace(location.protocol + '//' + location.hostname, '');
      var script = document.createElement('script');
      script.src = '/feeds/posts/summary?alt=json-in-script&max-results=1&redirect=false&path='+pathname+'&callback='+callback.name+'';
      document.body.appendChild(script);
  }
}
//]]>
</script>

CSS

To improve the appearance, add CSS as follows. Please modify as you like.

#blog-pager {
    font-size: 90%;
}
#blog-pager-newer-link {
    float: left;
    width: 40%;
    text-align: left;
}
#blog-pager-older-link {
    float: right;
    width: 40%;
    text-align: right;
}

Adjustment

After adding the above CSS, you may find the text “Home” not at the center of the page navigation in the home or the latest post page. It is because the latest page doesn’t have the element with #blog-pager-newer-link.

Goto Edit HTML and find

<div class='blog-pager' id='blog-pager'>

and

    <b:if cond='data:newerPageUrl'>
      <span id='blog-pager-newer-link'>
      <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-newer-link&quot;' expr:title='data:newerPageTitle'><data:newerPageTitle/></a>
      </span>
    </b:if>

    <b:if cond='data:olderPageUrl'>
      <span id='blog-pager-older-link'>
      <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-older-link&quot;' expr:title='data:olderPageTitle'><data:olderPageTitle/></a>
      </span>
    </b:if>

You can see <span id='blog-pager-newer-link'></span> is inside <b:if cond='data:newerPageUrl'></b:if>.
The latest (newest) page cannot have a link to a newer page, so the page doesn’t have <span id='blog-pager-newer-link'>. The same goes in the “oldest” case.

Overwrite it as follows:

    <span id='blog-pager-newer-link'>
    <b:if cond='data:newerPageUrl'>
      <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-newer-link&quot;' expr:title='data:newerPageTitle'><data:newerPageTitle/></a>
      <b:else/>&#160;
    </b:if>
    </span>

    <span id='blog-pager-older-link'>
    <b:if cond='data:olderPageUrl'>
      <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-older-link&quot;' expr:title='data:olderPageTitle'><data:olderPageTitle/></a>
      <b:else/>&#160;
    </b:if>
    </span>
  • &#160; is &nbsp;, because Blogger’s editor cannot accept some entity references like &nbsp;.

Then, both <span id='blog-pager-newer-link'> and <span id='blog-pager-older-link'> come to appear in any pages.


FYI:

  • This article is introducing how to add images to page navigation, and well-organized.

Add Next/Previous Pager Navigation with Image - Blogger - TwistBlogg - Premium Blogger Tutorials and Widgets

A simple guide on how to add older previous pager or next prev blog pager in new blogger layout. We also shared stylish version that displays image.

2018-02-01

Oracle 非CDB(Non-CDB)はいつまで使えるのか

Oracle 非CDB(Non-CDB)アーキテクチャは、12c から非推奨となっているのですが、いつまで使える(サポートされる)のか現時点の情報をまとめておきます。

まず、日本語版の「Oracle® Databaseアップグレード・ガイド 12cリリース2 (12.2) 」

Oracle Databaseアップグレード・ガイドのこのリリースでの変更

The new release of Oracle Database provides improvements to upgrade performance, automation, and reporting.

には、

  • 非CDBアーキテクチャの非推奨
    非CDBアーキテクチャはOracle Database 12cリリース1では非推奨で、Oracle Database 12c リリース2より後ではサポートされず、使用できない場合があります。

との記載があります。

一方、英語版の ”Oracle® Database Database Upgrade Guide 12c Release 2 (12.2)”

Deprecated Features in Oracle Database 12c Release 2 (12.2)

Review the deprecated features listed in this section to prepare to use alternatives after you upgrade.

には、

  • Deprecation of Non-CDB Architecture
    The non-CDB architecture was deprecated in Oracle Database 12c. It can be desupported and unavailable in a release after Oracle Database 19c.

との記載があります。

英語版の日付は “December 2017” になっているのに、日本語版は「2017年7月」になっているので日本語版はアップデートされていないようです。近いうちにアップデートされるのかな、と思います。

昨年 18c の発表がありましたが、18c ではなく 19c より後はサポートされないと書いてますね。英語で “after Oracle Database 18c” と書いた場合、「通常」18c は含まれないので “after Oracle Database 18c” で良いと思うのですが、18c まではサポートするということを明確にするため、わざと “after Oracle Database 19c” と記載しているのかもしれません。

こちらは、Oralce の Mike Dietrich さんのブログなのですが、”after Oracle Database 12c Release 2” と書いてあるのに、”12c Release 2” から非CDB構成が使えなくなる(サポートされなくなる)という誤解が結構あったみたいですね。

Non-CDB architecture still exists in Oracle Database 12.2.

Non-CDB architecture still exists in Oracle Database 12.2./ Oracle 18 / Oracle 19. The statement yet about non-CDB disappearing in the near future.

また、非CDBのニーズが思ったより強かったので、18c までサポートすることになったのかもしれません。(推測です。)

まとめ

非CDB(Non-CDB)アーキテクチャは 18c まではサポートされそう。


注: 最新・正確な情報はご自身でご確認ください。