역할 1의 데이터에 대한 액세스 제한. SCP에 대한 액세스 권한. RLS. 일반 정보 및 설정. 레코드 수준에서 액세스 제한

이 문서의 프레임워크 내에서 수행할 모든 사용자 권한 설정은 섹션 1C 8.3 "관리" - "사용자 및 권한 설정"에 있습니다. 이 알고리즘은 관리되는 양식의 대부분의 구성에서 유사합니다. 1C 회계 프로그램이 예로 사용되지만 다른 프로그램(1C UT 11, 1C ZUP 3, 1C ERP)에서 권한 설정은 정확히 동일한 방식으로 수행됩니다.

설정 창의 "사용자" 섹션으로 이동합니다. 여기에 "사용자"와 "로그인 설정"이라는 두 개의 하이퍼링크가 있습니다. 그 중 첫 번째는 이 정보 베이스의 사용자 목록으로 직접 이동할 수 있습니다. 새 사용자를 만들기 전에 가능한 로그인 설정(오른쪽의 하이퍼링크)을 고려하십시오.

이 설정 양식에서 암호 복잡성(최소 7자 이상, 다양한 유형의 문자 필수 내용 등)을 설정할 수 있습니다. 여기에서 특정 기간 동안 활동이 없는 사용자에 대해 암호 길이, 유효 기간 및 프로그램 액세스 금지를 지정할 수도 있습니다.

이제 1C에 새 사용자 추가로 바로 이동할 수 있습니다. 아래 이미지와 같이 "만들기" 버튼을 클릭하면 됩니다.

우선, "Antonov Dmitry Petrovich"라는 전체 이름을 표시하고 해당 디렉토리에서 개인을 선택합니다. 여기에서 직원이 근무하는 부서를 지정할 수도 있습니다.

로그인 이름 "AntonovDP"는 전체 이름 "Antonov Dmitry Petrovich"의 약어로 자동으로 대체되었습니다. 1C Enterprise의 비밀번호 및 인증을 설정하십시오. 여기에서 이 사용자가 스스로 암호를 변경할 수 있는지 여부도 지정할 수 있습니다.

이 정보 베이스를 시작할 때 선택 목록에서 Dmitry Petrovich Antonov를 사용할 수 있기를 원한다고 가정합니다. 이렇게 하려면 "선택 목록에 표시" 항목에 플래그를 설정해야 합니다. 결과적으로 프로그램을 시작할 때 인증 창은 아래 그림과 같이 표시됩니다.

사용자 가이드 카드의 또 다른 중요한 설정인 "프로그램에 로그인할 수 있습니다."에 주목합시다. 지연이 설정되지 않은 경우 사용자는 이 정보 베이스에 들어갈 수 없습니다.

액세스 권한

사용자 카드(Antonov Dmitry Petrovich)에 모든 데이터를 입력한 후 아래 그림과 같이 기록하고 액세스 권한 설정을 진행합니다.

이전에 프로그램 액세스 프로필에 입력한 목록을 열기 전에. 필요한 상자를 선택하십시오.

그룹 프로필에 액세스

액세스 그룹 프로필은 사용자 및 권한 설정을 위한 기본 양식에서 구성할 수 있습니다. "액세스 그룹" 섹션으로 이동하여 "액세스 그룹 프로필" 하이퍼링크를 클릭합니다.

열린 목록 양식에서 새 그룹을 만들어 봅시다. "허용된 작업(역할)" 탭의 표 섹션에서 생성 중인 그룹에 포함된 사용자의 액세스 권한에 영향을 주는 역할의 확인란을 선택해야 합니다. 이러한 모든 역할은 구성자에서 생성 및 구성됩니다. 사용자 모드에서 수정하거나 생성할 수 없습니다. 기존 목록에서만 선택할 수 있습니다.

RLS: 레코드 수준 액세스 제한

특정 섹션에서 프로그램 데이터에 대한 액세스를 보다 유연하게 구성할 수 있습니다. 이를 활성화하려면 사용자 및 권한 설정 양식에서 같은 이름의 항목에 플래그를 설정하십시오.

이 설정을 활성화하면 시스템 성능에 부정적인 영향을 미칠 수 있습니다. 요점은 RLS 메커니즘이 설정된 제한에 따라 모든 요청을 변경한다는 것입니다.

이전에 만든 "테스트 그룹" 액세스 그룹 프로필로 이동합니다. 아래 그림은 레코드 수준에서 액세스 제한을 활성화한 후 추가 탭 "액세스 제한"이 나타나는 것을 보여줍니다.

테스트 그룹이 할당된 사용자가 프로필에 지정된 조직을 제외하고 이 정보 베이스의 모든 조직에 대한 데이터에 액세스할 수 있기를 원한다고 가정해 보겠습니다.

상단 표 섹션에서 조직별 액세스 제한을 설정합니다. 아래 부분에서 Roga LLC 조직의 데이터(문서, 디렉터리 등)에 대한 액세스 권한이 제공되지 않음을 명시합니다.

종종 데이터에 대한 액세스를 부분적으로 제한해야 할 필요가 있습니다. 예를 들어 사용자가 자신의 조직에 대한 문서만 보아야 하는 경우입니다. 이러한 경우 1C는 레코드 수준 액세스 제한 메커니즘(소위 RLS - Record Level Securiy)을 사용합니다.

예를 들어 다음 작업에 직면했다고 가정합니다. 기업은 여러 회사의 회계를 유지하고 각 상대방과 데이터베이스 사용자는 특정 조직에 속합니다. 각 사용자가 자신의 조직에만 상대방을 보고, 편집하고, 추가할 수 있도록 "계약자" 디렉토리에 대한 액세스 권한을 제공해야 합니다.

이 문제를 해결하기 위해 플랫폼 "1C:Enterprise 8.2"를 사용합니다. "관리되는 응용 프로그램" 옵션이 기본 시작 모드로 선택될 속성에서 새 구성을 생성해 보겠습니다.

다음으로 "Organizations" 디렉토리와 "Organization" 속성을 가진 "Contractors" 및 "Users"라는 두 개의 추가 디렉토리를 생성해 보겠습니다. 디렉토리 외에도 "조직"과 "사용자"(적절한 유형)의 두 가지 세션 매개 변수가 필요합니다. 이러한 매개 변수의 값은 구성 세션이 시작될 때 설정되며 종료될 때까지 저장됩니다. 레코드 수준에서 액세스 제한 조건을 추가할 때 사용할 매개 변수의 값입니다.

세션 매개변수는 특수 모듈인 "세션 모듈"에서 설정됩니다.

이 모듈에서는 미리 준비된 일반 모듈 "FullPermissions"의 함수를 호출하는 미리 정의된 절차 "SetSessionParameters"를 설명합니다. 이것은 프로그램 코드의 일부가 서버 측에서만 실행될 수 있는 관리되는 응용 프로그램 모드에서 데이터베이스 작업의 특성으로 인해 필요합니다(이 기사에서는 이러한 원칙에 대해 설명하지 않겠습니다).

Code 1C v 8.x 절차 설정 세션 매개변수(필수 매개변수)
FullPermissions.SetSessionParameters();
종료 절차

"FullPermissions" 모듈의 속성에서 "Server", "Server call" 및 "Privileged" 상자를 선택합니다(후자는 이 모듈의 프로시저 및 기능이 액세스 제어 없이 실행됨을 의미함). 모듈의 텍스트는 다음과 같습니다.

코드 1C v 8.x 함수 DefineCurrentUser()
CurrentUser = Directories.Users.FindByName(사용자 이름(), True);
현재 사용자를 반환합니다.
EndFunctions

프로시저 SetSessionParameters() 내보내기
CurrentUser = CurrentUser() 결정;
CurrentOrganization = Directories.Organizations.EmptyReference();
If ValueFilled(CurrentUser) 다음
현재조직 = 현재사용자.조직;
EndIf;
SessionParameters.User = 현재 사용자;
SessionParameters.Organization = 현재 조직;
종료 절차

FunctionSessionParameterSet(ParameterName) 내보내기
Return ValueFilled(SessionParameters[ParameterName]);
EndFunctions

기능 RoleAvailableToUser(RoleName) 내보내기
RoleAvailable(RoleName)을 반환합니다.
EndFunctions

관리되는 응용 프로그램 모듈에서 "Users" 디렉토리에 구성 사용자가 있는지 확인하고(단순화를 위해 이름으로 검색함) 찾을 수 없으면 시스템을 종료합니다. 이는 세션 매개변수가 채워지도록 하기 위해 필요합니다.

Code 1C v 8.x 사전 시스템 작동 절차(실패)
// 관리자를 제외한 모든 사람이 "Users" 디렉터리에 있는지 확인합니다.
FullPermissions.RoleAvailableToUser("FullPermissions")가 아니면
FullPermissions.SessionParameterSet("사용자")가 아니면
Warning("사용자 """ + 사용자 이름() + """ 디렉토리를 찾을 수 없습니다!");
거부 = 참;
반품;
EndIf;
EndIf;
종료 절차

이제 액세스 제한에 대한 설명으로 바로 이동할 수 있습니다. 이렇게 하려면 "사용자" 역할을 만들고 "제한 템플릿" 탭으로 이동하여 다음 템플릿 텍스트와 함께 새 템플릿 "AccountsReadingChange"를 추가합니다. WHERE 조직 = 조직 #Parameter(1)


제약 조건 템플릿 텍스트는 쿼리 언어의 확장입니다. 일반 요청과 달리 제한 텍스트에는 반드시 "WHERE" 절이 포함되어야 합니다. 질의 매개변수의 값(이 경우에는 "&Organization")으로 동일한 이름의 세션 매개변수 값이 사용됩니다. #Parameter(1) 형식의 구성은 시스템이 이 위치에서 템플릿이 사용되는 위치에서 첫 번째 매개 변수로 전달된 텍스트를 대체함을 의미합니다. 제공된 템플릿의 도움으로 테이블의 각 레코드가 확인됩니다(이 경우 "계약자" 조회가 됨). "조직" 속성 값이 해당 세션 매개변수에 지정된 값과 일치하는 레코드의 경우 템플릿에 설명된 조건이 충족됩니다. 따라서 이러한 항목은 읽기, 편집 또는 추가에 사용할 수 있습니다(템플릿이 적용되는 이러한 권한에 따라 다름). 위의 예를 들어 설명하겠습니다.

"사용자" 역할의 "권한" 탭으로 이동하여 "계정" 디렉토리에서 권한 목록을 엽니다. "읽기", "변경" 및 "추가" 권한에 대해 "AccountsReadChange" 제약 조건 템플릿을 사용합니다.

"읽기" 권한의 경우 "OR ThisGroup" 매개 변수가 있는 템플릿을 사용합니다. 동시에 이 역할의 사용자는 조직의 "계정" 디렉토리 요소뿐만 아니라 이 디렉토리의 모든 그룹도 읽을 수 있습니다.

#AccountsReadingChange("또는 이 그룹")

디렉토리의 새 요소를 추가할 때 시스템은 미리 정의된 속성의 암시적 읽기를 수행하므로(예: 번호 매기기에 필요함) 이러한 필드를 방해받지 않고 읽을 수 있도록 해야 합니다. 이렇게 하려면 데이터 액세스 제한 테이블에 빈 제한 텍스트가 있는 행을 추가하고 이 규칙이 적용되는 필드(링크, 데이터 버전, 부모, 코드)를 나열합니다.

따라서 레코드 수준에서 액세스를 제한하는 작업이 해결됩니다. 기존 제한이 있는 사용자는 조직의 데이터만 보고 편집할 수 있습니다.

1C:Enterprise 8 플랫폼에는 레코드 수준에서 데이터에 대한 액세스를 제한하는 기본 제공 메커니즘이 있습니다. 여기에서 일반적인 정보를 읽을 수 있습니다. 즉, RLS를 사용하면 필드 값에 대한 일부 조건에 따라 데이터에 대한 액세스를 제한할 수 있습니다. 예를 들어 "조직" 속성 값에 따라 문서에 대한 사용자 액세스를 제한할 수 있습니다. 일부 사용자는 "Management Company" 조직의 문서로 작업하고 나머지는 "Dairy Plant" 조직으로 작업합니다. 예로서.

준비

예제는 SCP 1.3의 데모 구성에서 구현됩니다. "Storekeeper" 사용자를 생성하고 동일한 이름의 "Storekeeper" 역할을 추가해 보겠습니다.

이제 레코드 수준에서 액세스 권한 설정으로 직접 진행하겠습니다. "사용자 관리" 인터페이스로 전환해 보겠습니다. 기본 메뉴에서 "레코드 수준에서 액세스 -> 옵션"을 선택합니다. 여기에서 "개체 유형별로 레코드 수준에서 액세스 제한" 상자를 선택하고 개체 목록에서 "조직"을 선택합니다.

따라서 RLS 사용을 활성화했습니다. 이제 설정해야 합니다.

레코드 수준 액세스 제어는 각 사용자 또는 권한 프로필에 대해 별도로 구성되지 않습니다. RLS는 사용자 그룹에 대해 구성됩니다. 새 사용자 그룹을 추가하고 이름을 "Storekeepers"로 지정하겠습니다.

양식 오른쪽의 그룹 구성은 이 그룹에 속한 사용자 목록을 보여줍니다. 앞에서 만든 사용자를 추가해 보겠습니다. 왼쪽에는 액세스 제한 테이블이 있습니다. RLS 설정에서 조직에 의해서만 액세스가 제한되도록 선택했으므로 한 가지 유형의 액세스 개체만 표시됩니다. "액세스 설정" 버튼을 클릭합니다. 현재 그룹에 대한 권한 설정 프로세스가 열립니다.

그룹의 액세스 개체 목록에서 "PPE "Entrepreneur"" 조직을 추가합니다. 권리 상속 유형은 변경하지 않고 그대로 두겠습니다. 액세스 개체에 대한 권한은 읽기 및 쓰기로 설정됩니다. "확인"을 클릭하면 설정이 완료됩니다. 방금 조직 수준에서 RLS를 설정했습니다.

사용자가 보는 것

이전에 생성한 사용자로 프로그램을 실행하고 "Organizations" 디렉토리를 엽니다. 다음은 사용자와 전체 권한을 가진 사용자에게 목록이 표시되는 방식입니다.

보시다시피 스토어 키퍼 사용자는 우리가 읽기 액세스를 허용한 조직을 하나만 볼 수 있습니다. 상품 및 서비스 수령과 같은 문서에도 동일하게 적용됩니다.

따라서 사용자는 액세스가 설정되지 않은 조직을 볼 수 없을 뿐만 아니라 "조직" 속성에 대한 역할의 권한이 있는 정보 베이스의 문서 및 기타 개체를 읽거나 쓸 수 없습니다 "가 설정됩니다.

RLS를 설정하는 가장 간단한 예를 살펴보았습니다. 다음 기사에서는 "Manufacturing Enterprise Management" 버전 1.3 구성에서 RLS 메커니즘 구현에 대해 설명합니다.

1C에는 액세스 권한 시스템이 내장되어 있습니다(이 시스템을 1C 역할이라고 함). 이 시스템은 정적입니다. 관리자가 권한을 1C로 설정했기 때문에 그대로 유지됩니다.

또한 동적 액세스 권한 시스템(RLS 1C라고 함)이 있습니다. 여기에서 1C 권한은 지정된 매개 변수를 기반으로 사용자가 작업할 때 동적으로 계산됩니다.

다양한 프로그램에서 가장 일반적인 보안 설정 중 하나는 사용자 그룹에 대한 읽기/쓰기 권한 집합과 그룹에서 사용자를 포함하거나 제외하는 것입니다. 예를 들어 유사한 시스템이 Windows AD(Active Directory)에서 사용됩니다.

1C의 이러한 보안 시스템을 역할 1C라고 합니다. 역할 1C는 일반/역할 분기의 구성에 있습니다. 1C 역할은 1C 권한이 할당된 그룹 역할을 합니다. 다음으로 사용자가 이 그룹에 포함되거나 제외됩니다.

1C 역할의 이름을 두 번 클릭하면 1C 역할에 대한 권한 편집기가 열립니다. 왼쪽에는 1C 개체 목록이 있습니다. 아무거나 선택하면 액세스 권한에 대한 옵션이 오른쪽에 표시됩니다(최소: 읽기, 추가, 변경, 삭제).

최상위 분기(현재 구성의 이름)의 경우 1C 관리 권한과 다양한 옵션을 실행할 수 있는 액세스 권한이 설정됩니다.

모든 1C 권한은 "단순" 권한과 "대화형"이 추가된 동일한 권한의 두 그룹으로 나뉩니다. 무슨 뜻이에요?

사용자가 양식(예: 처리)을 열고 버튼을 누르면 내장된 1C 언어로 된 프로그램이 문서 삭제와 같은 특정 작업을 수행합니다. 이러한 작업의 허용 (프로그래밍 방식으로 수행)- "단순히"1C의 권한이 있습니다.

사용자가 저널을 열고 키보드에서 스스로 작업을 시작하면(예: 새 문서 입력) 이는 "대화식" 1C 권한입니다.

사용자는 여러 역할을 사용할 수 있으며 이 경우 권한이 함께 추가됩니다.

역할을 사용하여 액세스 권한을 설정하는 가능성에 대한 섹션은 1C 개체입니다. 즉, 디렉토리에 대한 액세스를 활성화하거나 비활성화할 수 있습니다. 조금 켤 수 없습니다.

이를 위해 1C RLS라는 1C 역할 시스템의 확장이 있습니다. 이는 액세스를 부분적으로 제한할 수 있는 동적 액세스 권한 시스템입니다. 예를 들어 사용자는 특정 창고 및 조직에 대한 문서만 볼 수 있고 나머지는 볼 수 없습니다.

주의하여! 혼란스러운 RLS 1C 체계를 사용할 때 다른 사용자가 다른 사용자로부터 생성된 동일한 보고서를 확인하려고 할 때 질문이 있을 수 있습니다.

특정 디렉토리(예: 조직)와 특정 권한(예: 읽기)을 가져갑니다. 1C 역할에 대한 읽기를 허용합니다. 데이터 액세스 제한 패널에서 설정에 따라 TRUE 또는 FALSE를 반환하는 쿼리 텍스트를 설정합니다. 설정은 일반적으로 정보 레지스터(예: 구성 정보 레지스터 Accounting UserAccessRightsSettingsUsers)에 저장됩니다.

이 요청은 각 디렉토리 항목에 대해 동적으로 실행됩니다(읽기를 구현하려고 할 때). 따라서 보안 쿼리가 TRUE를 반환한 레코드에 대해 사용자는 볼 수 있지만 나머지는 볼 수 없습니다.
RLS 1C 제한이 적용되는 1C 권한은 회색으로 강조 표시됩니다.

동일한 RLS 1C 설정 복사는 템플릿을 사용하여 수행됩니다. 템플릿을 만들고 이름을 MyTemplate으로 지정하고 보안 요청을 지정합니다. 그런 다음 1C 액세스 권한 설정에서 "#MyTemplate"과 같은 템플릿 이름을 지정합니다.

사용자가 1C 엔터프라이즈 모드에서 작업할 때 RLS 1C가 실행 중일 때 "권한이 부족합니다"(예: Xxx 디렉터리 읽기)라는 오류 메시지가 표시될 수 있습니다.

이는 RLS 1C가 여러 레코드 읽기를 차단했음을 의미합니다.

이러한 메시지가 표시되지 않도록 하려면 내장 1C 언어의 요청 텍스트에 ALLOWED()라는 단어를 사용해야 합니다.

예를 들어:

1C 프로그램에는 Configurator - General - Roles에 있는 액세스 권한 시스템이 내장되어 있습니다.

이 시스템의 특징은 무엇이며 주요 목적은 무엇입니까? 이를 통해 사용자의 위치 또는 활동에 해당하는 권한 집합을 설명할 수 있습니다. 이 액세스 권한 시스템은 본질적으로 정적입니다. 즉, 관리자가 액세스 권한을 1C로 설정하면 그대로입니다. 정적 액세스 권한 외에도 두 번째 액세스 권한 시스템인 동적(RLS)이 있습니다. 이 시스템에서 액세스 권한은 작업 과정에서 주어진 매개변수에 따라 동적으로 계산됩니다.

1C의 역할

다른 프로그램에서 가장 일반적인 보안 설정은 다양한 사용자 그룹에 대한 소위 읽기 / 쓰기 권한 집합이며 향후 그룹에서 특정 사용자를 포함하거나 제외합니다. 예를 들어 이러한 시스템은 Windows AD(Active Directory) 운영 체제에서 사용됩니다. 1C 소프트웨어에서 사용되는 보안 시스템을 역할이라고 합니다. 이게 뭐야? 1C의 역할은 일반 - 역할 분기의 구성에 있는 개체입니다. 이러한 1C 역할은 권한이 할당된 그룹입니다. 앞으로 각 사용자를 이 그룹에 포함하거나 제외할 수 있습니다.

역할 이름을 두 번 클릭하면 역할에 대한 권한 편집기가 열립니다. 왼쪽에는 개체 목록이 있고, 그 중 하나를 표시하고 오른쪽에는 가능한 액세스 권한에 대한 옵션이 표시됩니다.

— 읽기: 데이터베이스 테이블에서 레코드 또는 부분 조각을 가져옵니다.
- 추가: 기존 기록을 유지하면서 새로운 기록을 추가합니다.
— 변경: 기존 기록을 변경합니다.
- 삭제: 일부 기록, 나머지는 변경되지 않은 상태로 유지합니다.

모든 액세스 권한은 두 가지 주요 그룹으로 나눌 수 있습니다. 이것은 "단순" 권한과 "대화형" 특성이 추가된 권한입니다. 여기서 의미하는 것은 무엇입니까? 그리고 그 일은 다음과 같습니다.

사용자가 처리와 같은 일부 양식을 열고 동시에 마우스로 클릭하면 내장 1C 언어의 프로그램이 문서 삭제와 같은 특정 작업을 수행하기 시작합니다. 프로그램에 의해 수행되는 이러한 작업의 허가에 대해 1C의 권리는 각각 "단순"합니다.

사용자가 저널을 열고 키보드에서 스스로 무언가를 입력하기 시작하는 경우(예: 새 문서) "대화형" 1C 권한이 이러한 작업을 허용합니다. 각 사용자는 한 번에 여러 역할을 사용할 수 있으며 권한이 추가됩니다.

1C의 RLS

디렉토리(또는 문서)에 대한 액세스를 활성화하거나 비활성화할 수 있습니다. 조금만 켤 수는 없습니다. 이를 위해 RLS라고하는 1C 역할 시스템의 특정 확장이 있습니다. 이것은 부분 액세스 제한을 도입하는 동적 액세스 권한 시스템입니다. 예를 들어 특정 조직 및 창고의 문서만 사용자의 관심을 끌 수 있으며 나머지는 볼 수 없습니다.

RLS 시스템은 그 복잡한 체계를 이해하기가 다소 어려우며, 예를 들어 다양한 시스템에서 생성된 동일한 보고서를 비교할 때 사용자마다 질문이 있을 수 있으므로 RLS 시스템을 매우 신중하게 적용해야 한다는 점을 명심해야 합니다. 사용자. 그러한 예를 생각해 봅시다. 특정 디렉토리(예: 조직) 및 특정 권한(예: 읽기)을 선택합니다. 즉, 1C 역할에 대한 읽기를 허용합니다. 동시에 데이터 액세스 제한 원격 패널에서 설정에 따라 False 또는 True가 설정되는 요청 텍스트를 설정합니다. 일반적으로 설정은 특수 정보 레지스터에 저장됩니다.

이 쿼리는 모든 디렉토리 항목에 대해 동적으로 실행됩니다(읽기 구성을 시도할 때). 다음과 같이 작동합니다. 보안 요청이 할당된 레코드 - True, 사용자는 볼 수 있지만 다른 사용자는 볼 수 없습니다. 제한이 설정된 1C 권한은 회색으로 강조 표시됩니다.

동일한 RLS 설정을 복사하는 작업은 템플릿을 사용하여 수행됩니다. 먼저 템플릿을 만들고 예를 들어 보안 요청을 반영하는 MyTemplate과 같은 이름을 지정합니다. 그런 다음 액세스 권한 설정에서 이 템플릿의 이름을 "#MyTemplate"과 같이 지정합니다.

사용자가 1C 엔터프라이즈 모드에서 작업할 때 RLS에 연결할 때 "권한 부족"(예: XXX 디렉터리 읽기)과 같은 오류 메시지가 나타날 수 있습니다. 이는 RLS 시스템이 일부 레코드 읽기를 차단했음을 나타냅니다. 이 메시지가 다시 나타나지 않도록 하려면 요청 텍스트에 ALLOWED라는 단어를 입력해야 합니다.



유사한 기사