權限配置項目不是這個項目的關鍵環節,不需要很繁瑣。所以我這里使用 django admin進行開發。 django admin只要針對表關系建立相應的對象配置上即可使用。還是比較方便的。 在這里我建立的對象如下: hive 對象相關表 Hive數據庫信息 用于存儲當前 hive 中的
權限配置項目不是這個項目的關鍵環節,不需要很繁瑣。所以我這里使用django admin進行開發。
django admin只要針對表關系建立相應的對象配置上即可使用。還是比較方便的。
在這里我建立的對象如下:
hive對象相關表
Hive數據庫信息 用于存儲當前hive中的數據庫。
Hive數據庫表信息 用于存儲當前hive中的表信息。
Hive不允許訪問的列信息 用于存儲關鍵列,這個表需要與hive數據庫表信息關聯。
Hive頻道分區信息 用于儲存當前hive中表的分區信息。
Hive必須包含的列信息 用于存儲當前查詢中hive必須包含的特殊列。
權限表
用戶HiveServer權限表s 用于將使用者與以上hive對象相關聯。
表結構如下:
class HiveDB(models.Model):????id = models.AutoField(primary_key=True)????name = models.CharField(max_length=40,verbose_name=u'數據庫名稱')????desc = models.CharField(max_length=200,verbose_name=u'描述',null = True, blank = True)????class Meta:????????db_table = u'hive_db'????????verbose_name = u'hive數據庫列表'????def __unicode__(self):????????return self.name?class HivePtchannelValue(models.Model):????id = models.AutoField(primary_key=True)????name = models.CharField(max_length=40,verbose_name=u'頻道')????desc = models.CharField(max_length=200,verbose_name=u'描述',null = True, blank = True)????class Meta: ????????db_table = u'hive_ptchannel_value'????????verbose_name = u'hive頻道分區列表'????def __unicode__(self):????????return self.name?class HiveTable(models.Model): ????id = models.AutoField(primary_key=True)????db = models.ForeignKey(HiveDB)????name =models.CharField(max_length=40,verbose_name=u'表名')????ptinfo = models.CharField(max_length=200,verbose_name=u'分區列',null = True, blank = True)????desc =models.CharField(max_length=200,verbose_name=u'描述',null = True, blank = True)????class Meta:????????db_table = u'hive_table'????????verbose_name = u'hive數據庫表列表'????def __unicode__(self): ????????return self.db.name+"."+self.name?class ExcludeColumn(models.Model):????id = models.AutoField(primary_key=True)????name =models.CharField(max_length=40,verbose_name=u'名稱')????table = models.ForeignKey(HiveTable)????column =models.CharField(max_length=60,verbose_name=u'列名列表')????desc =models.CharField(max_length=200,verbose_name=u'描述',null = True, blank = True)????class Meta:????????db_table = u'hive_excludecolumn'????????verbose_name = u'hive不允許訪問列'????def __unicode__(self):????????return self.table.name+"."+self.name?class IncludeColumn(models.Model):????id = models.AutoField(primary_key=True)????name =models.CharField(max_length=40,verbose_name=u'名稱')????table = models.ForeignKey(HiveTable)????column =models.CharField(max_length=60,verbose_name=u'列名列表')????desc =models.CharField(max_length=200,verbose_name=u'描述',null = True, blank = True)????class Meta:????????db_table = u'hive_includecolumn'????????verbose_name = u'hive必須包含列'????def __unicode__(self):????????return self.table.name+"."+self.name?class HiveUserAuth(models.Model):????user = models.ForeignKey(User)????dbGroups = models.ManyToManyField(HiveDB, verbose_name=u'hive數據庫', blank=True)????tableGroups = models.ManyToManyField(HiveTable, verbose_name=u'hive數據表', blank=True)????exGroups = models.ManyToManyField(ExcludeColumn, verbose_name=u'hive不包含列', blank=True)????inGroups = models.ManyToManyField(IncludeColumn, verbose_name=u'hive包含列', blank=True)????ptGroups = models.ManyToManyField(HivePtchannelValue, verbose_name=u'頻道分區', blank=True)????maxMapCount = models.IntegerField(max_length = 4,blank=True,null=True, verbose_name = u'最大任務分區數')????maxRedCount = models.IntegerField(max_length = 2,blank=True,null=True, verbose_name = u'最大reduce槽位')????class Meta:????????db_table = u'hive_user_auth'????????verbose_name = u'用戶HiveServer權限表'????def __unicode__(self):????????return self.user.username
熟悉django的同學可以通過以上方式,很快的構建起一個方便的,安全的web服務。django使用這里就不介紹了,有興趣的同學可以看一下本博客中關于django的一些介紹。
原文地址:自定義Hive權限控制(2) 權限配置項目, 感謝原作者分享。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END