2017-09-23 60 views
-1

在DB2中的存儲過程中,我需要查找有關用戶組的信息。 DB2沒有這方面的內置功能,所以似乎我需要爲此編寫用戶定義的函數或用戶定義的過程。實際上,這必須寫成Java。枚舉Java中的用戶組

所以,在Java中:如何從操作系統中查看用戶是哪個組的成員?或者:給定組名,獲取組成員用戶名列表。

該方法必須在Linux上工作(如果它是操作系統不可知的,但這並不重要)。

該方法必須尊重操作系統中配置的任何授權集成。換句話說:如果操作系統已經設置爲使用SSSD進行用戶授權,那麼Java代碼不應該依賴於能夠在/ etc/group中查找組成員身份。

所以我希望能夠做到來自Java的「id USERNAME」或「getent group GROUPNAME」Linux shell命令的等價物。 Python有這種任務的「grp」模塊,但我還沒有發現類似於Java的東西。

優選地,解決方案應該儘可能少地依賴外部庫。如果只依賴於合理現代化JRE的API,那將是最好的。

+1

對不起,錯誤的語言。 Java試圖獨立於平臺,所以它不關心這些事情。谷歌可能會啓動一個已經實施了可以幫助你的東西的人。 –

+2

您可以從Java運行系統命令並分析輸出。 – Henry

+0

John:我需要爲此使用Java。 請不要告訴我谷歌;我之所以問這個問題有一個原因:谷歌沒有提供任何有用的東西。 –

回答

1

在Java中沒有「乾淨」的方式來做到這一點。 Java沒有用於枚舉用戶組的任何標準API。您的選擇是:

  • 實現本機庫包裝,稱爲getgroups C庫的方法,然後通過JNI或JNA
  • 使用java.lang.Process中從Java調用它來調用外部程序來獲得從Java

信息

  • 查詢LDAP或Kerberos/AD或JNDI最後一個只有在系統使用LDAP/Kerberos的/ JNDI,你有適當的憑據,模式CONFIGS等工作。這些使得這可能是最難的方法......並且在實踐中就像其他方法那樣不可移植。

  • +0

    非常感謝您的確切答案。我可能不得不求助於用C語言而不是Java編寫,然後 - 儘管我更喜歡託管語言,儘管它在部署方面存在一些問題。 –