ContentProviderのアクセス制限の方法について

889 views
Skip to first unread message

宮山

unread,
Aug 21, 2009, 7:00:33 AM8/21/09
to 日本Androidの会
皆様はじめまして、宮山と申します。

アプリケーション間で共通のデータベースのテーブルにアクセスしようとしているのですが
ContentProvider経由でデータベースにアクセスさせる際に、自分が指定したアプリケーションしか
アクセス出来ないように設定できないでしょうか。

英語が未熟のため、色々と調べては見たのですが良く分かりませんでした。

以上、よろしくお願いいたします。

Keiji Ariyama

unread,
Aug 22, 2009, 6:59:40 AM8/22/09
to android-g...@googlegroups.com
有山@大阪です。

 特定アプリケーションのみに公開するContentProviderだと、ContentProvider
として実装する意味がないように思われますが。。。

 仕組みとしてアクセス元のアプリケーションを限定する方法は知らないのです
が、ContentProviderの中身のデータを何らかの方法で暗号化した状態で格納し
ておいたらどうでしょう。

 解き方を知っているアプリ以外がアクセスしても、ぐちゃぐちゃな文字が表示
されるような感じで。

/*********************************************
有限会社シーリス
代表 有山 圭二
@Address
〒530-0044
大阪市北区東天満二丁目2番5号
第2新興ビル 601
@Web http://www.c-lis.co.jp
*********************************************/

haruser

unread,
Aug 23, 2009, 12:12:37 PM8/23/09
to 日本Androidの会
はじめまして。
個人的にAndroidの勉強をしております。

Content Providerの仕組みは使いたいけど
他のアプリにデータは公開したくないな~と思ってちょっと調べました。

Androidに標準で入っているContactsというアプリは、
コンタクトリストのデータをContent Providerで公開していますが
使用するためには、AndroidManifest.xmlで<uses-permission>の定義が必要です。

これと同じように、provider の定義に permission 属性を設定し
permissionの許可情報の定義で android:protectionLevel という属性に、
"signature"(署名が同じ場合のみ許可)という値が設定できるので、これを指定しておけば

同じ証明書を使ったアプリケーションからのみアクセス可能ということが出来るのではないでしょうか?

(書籍「Google Android プログラミング入門」 p411 を参考にしました。)

>自分が指定したアプリケーションしか アクセス出来ないように設定できないでしょうか。
というのが異なる署名のアプリでという事ならちょっとわかりません。。

宮山

unread,
Aug 23, 2009, 11:30:44 PM8/23/09
to 日本Androidの会
こんにちは、宮山です。

haruserさんから返信いただいた内容の詳しいものが、はてなのharuserさんのBlogの8/23の書き込みで
ありましたが同じ方だったでしょうか?
http://d.hatena.ne.jp/haruser/20090823/1251042430

Blogに書かれていましたAndroidManifest.xmlの設定で、同署名の別アプリのみで
Content Providerにアクセスが制御できることが確認できました。

permission名とContentProvider名の設定だけでも、十分他のアプリからはアクセスされないとは
思いますが、開発ターゲットが商用アプリなので同署名のみアクセス可能にした方が好ましいと思ってます。

ご教授いただきありがとうございました。

Keiji Ariyama

unread,
Aug 24, 2009, 12:45:46 AM8/24/09
to android-g...@googlegroups.com
有山@大阪です。

> これと同じように、provider の定義に permission 属性を設定し
> permissionの許可情報の定義で android:protectionLevel という属性に、
> "signature"(署名が同じ場合のみ許可)という値が設定できるので、これを指
定しておけば
>
> 同じ証明書を使ったアプリケーションからのみアクセス可能ということが出来
るのではないでしょうか?
 おお、本当だ!気がつか無くてごめんなさい>宮山さん
 同じようにすれば、アクティビティやサービスへのアクセス制限にも利用でき
そうですね。

 ただ、Androidアプリがどうせ増えるんならその方向性は、アクセス制限じゃ
なくて、Intentの公開に傾いて欲しいと言う複雑な心境です・・・。

/*********************************************
有限会社シーリス
代表 有山 圭二
@Address
〒530-0044
大阪市北区東天満二丁目2番5号
第2新興ビル 601
@Web http://www.c-lis.co.jp
*********************************************/



宮山

unread,
Aug 24, 2009, 3:54:59 AM8/24/09
to 日本Androidの会
こんにちは、宮山です。

有山さん>
>  ただ、Androidアプリがどうせ増えるんならその方向性は、アクセス制限じゃ
> なくて、Intentの公開に傾いて欲しいと言う複雑な心境です・・・。
今回の要件が、データの参照ではなく更新系のロジックだったので、こういうアクセス制限が必要でした。

作っているアプリが割と特殊?な商用系ですので、こういった機能があると助かります。

Androidに携わったのが8月に入ったあたりからなのですが、Androidの機能が
携帯系というよりOpen系システムを触っているような気分なので
色々なものが出来るんじゃないかと思ってます。
#まさか携帯系のアプリでER図書いて、SQLをがりがり書くことになりそうとは思ってもみませんでした。

以上、よろしくお願いいたします。
Reply all
Reply to author
Forward
0 new messages