方俊霞2011-06-20字段级权限分配小案例问题描述:在数据权限分配中针对操作员/角色进行字段级权限分配时,怎么有这么多重复的列名呢?比如:部门。问题展现:在“系统服务-权限-数据权限控制设置-字段级”中勾选了销售管理的“销售统计表”问题展现:在数据权限分配中,针对具体的操作员/角色进行字段级权限分配,发现有很多重复的列名问题分析:首先,按照客户的问题,在打了最新的890补丁的环境下测试,问题重现。无解,跟踪看下吧!问题分析:问题分析:检索到一些关键的语句和大家一起分享下:1、授权时,插入的权限表insertintoaa_columnauth(cUserID,cKey,cFld,isUserGroup,cFuncID)values(N'00',N'sa[__]销售统计表',N'部门名称',N'0',N'N')问题分析:2、关键语句:SetNocountonDeclare@ColumnDicTable([cKey][nvarchar](50)NOTNULL,[cFld][nvarchar](100)NOTNULL,[iColPos][int]NULL,[cCaption][nvarchar](200)NULL,[bMustSel][bit]NULL)Insertinto@ColumnDicSelectcKey,cFld,iColPos,isnull(b.ccaption,D.ccaption)ascCaption,bMustSelfromUFMeta_999.dbo.AA_ColumnDicDleftjoinua_captionbonD.ccaption=b.cverandD.localeid=b.clocaleidWhereD.cKey=N'sa[__]销售统计表'and(bhideincolset=0orbhideincolsetisnull)--写入业务库的信息,主要是HR产品会向此表写入客户定义的数据。if(selectcount(*)fromAA_ColumnDicWherecKey=N'sa[__]销售统计表')>0beginInsertinto@ColumnDicSelectcKey,cFld,iColPos,cCaption,bMustSelfromAA_ColumnDicDWhereD.cKey=N'sa[__]销售统计表'and(bhideincolset=0orbhideincolsetisnull)andNotD.cFldin(SelectcFldfrom@ColumnDic)endselecta.cFld,cCaption,bMustSel,b.cFuncIDfrom@ColumnDicainnerjoinaa_columnauthbona.ckey=b.ckeyanda.cfld=b.cfldWhereb.cuserid=N'00'andb.ckey=N'sa[__]销售统计表'andisUserGroup=0andisnull(cCaption,N'')<>N''orderbyiColPos问题分析:3、从以上语句我们可以看出aa_columnauth数据主要来源于视图:AA_ColumnDic,那再看看视图的取数来源吧:SETQUOTED_IDENTIFIERONGOSETANSI_NULLSONGOALTERviewAA_ColumnDicasSELECT[cKey],[cFld],[cQryField],[iColPos],[cCaption],[cCaptionPar],[bFixed],[bDisp],[iColWidth],[iAlign],[cOrder],[bLock],[iMergeCols],[bMustSel],[bNeedSum],[pubufts],[LocaleID],[IsEnum],[EnumType],[EnumTypeString],[bFilter],[bMerge],[CanModify],[ReferType],[bHideInColSet],[cSumType],[cProjectNO],[cSubID],[cPointBit],[cFormat],[cEditStyle]FROMdbo.AA_ColumnDic_baseWHERE(LocaleID=dbo.UDF_GetLocaleID())GOSETQUOTED_IDENTIFIEROFFGOSETANSI_NULLSONGO问题分析:4、打开表:AA_ColumnDic_base看看吧发现存在标题和字段不对应的现象!!问题分析:5、再结合刚才ppt第8页语句:selecta.cFld,cCaption,bMustSel,b.cFuncIDfrom@ColumnDicainnerjoinaa_columnauthbona.ckey=b.ckeyanda.cfld=b.cfldWhereb.cuserid=N'00'andb.ckey=N'sa[__]销售统计表'andisUserGroup=0andisnull(cCaption,N'')<>N''orderbyiColPos找到问题原因!!问题分析:6、原来是因为AA_ColumnDic_base存在cfld列名<>ccaption标题,而:aa_columnauth和AA_ColumnDic又是按照ckey、cfld进行关联的,所以出现如上问题。问题分析:7、看看高版本u810.0现象如何无重复列名!!问题分析:再看看后台表:正常!总结:U810.0版本因为已经删除了表AA_ColumnDic_base中cfld列名<>ccaption标题的记录,所以进行数据权限字段级权限分配时无列名重复现象了。该问题已经出具补丁,补丁号为:CP-U890-10587-110531-RP参见:问题号:201006250144描述:CP-U890-9491-100702-RP.msi,该补丁解决采购明细表等部分报表因为在赋权界面有部分字段重复,导致单选其中某个字段会导致字段权限控制不正确的问题。谢谢大家!