Apprêt de fondamentaux de sécurité SharePoint / Éviter les pièges

MISE À JOUR 12/18/07: Voir l'article de Paul Liebrand pour certaines conséquences techniques de supprimer ou de modifier les noms de groupe par défaut (voir son commentaire ci-dessous ainsi).

Vue d'ensemble:

Sécurité de SharePoint est facile à configurer et à gérer. Cependant, Il s'est avéré difficile pour les nouveaux administrateurs à vraiment envelopper les mains autour d'elle. Non seulement cela, J'ai vu certains administrateurs de parvenir à une compréhension parfaite lundi seulement pour avoir perdu en vendredi parce qu'ils n'ont pas à faire n'importe quelle configuration dans l'intervalle. (J'avoue avoir ce problème moi-même). Cette entrée de blog, j'espère que fournit une amorce de sécurité SharePoint utile et est orientée vers des meilleures pratiques de configuration de sécurité.

Remarque importante:

Cette description est issue hors de la zone de sécurité de SharePoint. Mon expérience personnelle est orienté autour de MOSS donc il peut y avoir des trucs spécifiques MOSS ici, mais je crois que c'est exact pour WSS. J'espère que quelqu'un voyant toute erreur ou omission sera signaler dans les commentaires ou Ecrivez-moi. Je vais faire des corrections post hâte.

Principes de base:

Aux fins de cette vue d'ensemble, Il y a quatre aspects fondamentaux de la sécurité: utilisateurs/groupes, objets sécurisables, héritage et niveaux d'autorisation.

Utilisateurs et groupes break down to:

  • Utilisateurs individuels: Tiré d'active directory ou créés directement dans SharePoint.
  • Groupes: Directement mappé d'active directory ou créé dans SharePoint. Les groupes sont une collection d'utilisateurs. Les groupes sont mondiaux dans une collection de sites. Ils sont jamais "liés" pour un objet sécurisable spécifique.

Objets sécurisables pause au moins:

  • Sites
  • Bibliothèques de documents
  • Éléments individuels dans les listes et les bibliothèques de documents
  • Dossiers
  • Divers paramètres de BDC.

Il autres objets sécurisables, mais vous obtenez l'image.

Niveaux d'autorisation: Un faisceau de granulaire / droits d'accès de bas niveau qui incluent des choses comme créer/lire/effacer les entrées dans les listes.

Héritage: Par défaut des entités héritent des paramètres de sécurité de leur objet conteneur. Sous-sites héritent de l'autorisation de leur parent. Bibliothèques de documents héritent de leur site. Ainsi de suite, etc..

Les utilisateurs et les groupes se rapportent à des objets sécurisables via les niveaux d'autorisation et d'héritage.

Règles de sécurité les plus importantes à comprendre, Jamais 🙂 :

  1. Les groupes sont tout simplement des collections d'utilisateurs.
  2. Les groupes sont globales au sein d'une collection de sites (i.e. Il n'y a rien de tel qu'un groupe défini à un niveau de site).
  3. Nom du groupe ne pas résister, groupes ne, dans et d'eux-mêmes, avoir un niveau particulier de sécurité.
  4. Les groupes ont la sécurité dans le contexte d'un objet sécurisable spécifique.
  5. Vous peut attribuer des niveaux d'autorisation différents pour le même groupe pour chaque objet sécurisable.
  6. Stratégies d'application Web l'emporte sur tout cela (voir ci-dessous).

Les administrateurs de sécurité perdus dans une mer de listes d'utilisateurs et de groupes peuvent toujours compter sur ces axiomes de gérer et de comprendre leur configuration de la sécurité.

Pièges:

  • Noms de groupe impliquent faussement la permission: Out of the box, SharePoint définit un ensemble de groupes dont les noms impliquent un niveau inhérent de sécurité. Considérons le groupe « Contributeur ». Un peu familier avec sécurité SharePoint peut bien regarder ce nom et supposer que n'importe quel membre de ce groupe peut "contribuer" à n'importe quel site/liste/bibliothèque dans le portail. C'est peut-être vrai mais pas parce que le nom du groupe se trouve être « contributeur ». Ceci n'est vrai out of the box parce que le groupe a bénéficié d'un niveau d'autorisation qui leur permet d'ajouter/modifier/supprimer des contenus à la racine du site. Par héritage, les contributeurs »" groupe peut également ajouter/modifier/supprimer contenu à chaque sous-site. On peut "casser" la chaîne d'héritage et le changement du niveau d'autorisation d'un sous-site que les membres de la soi-disant « contributeur" groupe ne peuvent pas contribuer à tous les, mais seulement lire (par exemple). Ce ne serait pas une bonne idée, de toute évidence, car il serait très confuse.
  • Les groupes ne sont pas définis à un niveau de site. Il est facile de confondre par l'interface utilisateur. Microsoft fournit un lien pratique vers gestion utilisateur/groupe par l'intermédiaire "de personnes et de groupes de chaque site" lien. Il est facile de croire que quand je suis au site "xyzzy" et j'ai créer un groupe par le biais personnes de xyzzy et groupes lien que je viens de créer un groupe qui existe seulement à xyzzy. Ce n'est pas le cas. J'ai effectivement créé un groupe pour la collecte de l'ensemble du site.
  • Appartenance à des groupes ne varie pas par site (i.e. C'est le même partout où que le groupe est utilisé): Considérons le groupe propriétaire »" et deux sites, « HR" et « Logistique ». Il serait normal de penser que deux personnes différentes détiendrait ces sites — un propriétaire de HR et propriétaire d'une logistique. L'interface utilisateur, il est facile pour un administrateur de sécurité à altérer ce scénario. Si je ne savais pas mieux, Je pourrais accéder les personnes et les groupes liens via le site RH, Sélectionnez les propriétaires"" groupe et ajouter mon propriétaire HR à ce groupe. Un mois plus tard, Logistique est en ligne. J'ai accéder des personnes et des groupes depuis le site de logistique, ajouter pull up les propriétaires"" Groupe. Je vois le propriétaire HR là et lui enlever, pensant que je suis lui retirer propriétaires sur le site de logistique. En fait, Je suis lui retirer le groupe global des propriétaires. Hilarité s'ensuit.
  • Négliger de nom basé sur le rôle spécifique des groupes: Les approbateurs"" groupe est un parfait exemple. Ce qui peut les membres de cette approbation de groupe? Où est-ce qu'ils peuvent approuver il? Ai-je vraiment envie département logistique personnes pour pouvoir approuver des documents RH? Bien sûr que non. Toujours nommer des groupes fondées sur leur rôle au sein de l'Organisation. Cela permettra de réduire le risque que le groupe est assigné un niveau d'autorisation inappropriés pour un objet sécurisable particulier. Nommer des groupes fondées sur leur rôle. Dans le scénario précédent de HR/logistique, Je devrais avoir créé deux nouveaux groupes: « Les propriétaires des ressources humaines" « les propriétaires de logistique et" et attribuer des niveaux d'autorisation raisonnable pour chacun et le montant minimal requis pour les utilisateurs de faire leur travail.

Autres références utiles:

Si vous avez fait il ce bien:

S'il vous plaît laissez-moi savoir votre opinion via les commentaires ou à m'envoyer un email. Si vous connaissez d'autres bonnes références, Veuillez faire de même!

Tags Technorati:

Facile et rapide: Créer un composant WebPart Affichage de données (DVWP)

Il y a une foule de renseignements très sur le WSS 3.0 Composant WebPart Affichage de données (DVWP) sur le web à partir de plusieurs sources. Cependant, J'ai trouvé qu'il est étonnamment difficile de trouver des informations sur cette première étape très basique. Voici un autre article dans le "rapide et facile" série pour y répondre.

Suivez ces étapes pour créer un composant WebPart Affichage de données (DVWP). Elles reposent sur un « annonces" composant WebPart, mais s'applique à la plupart des listes.

  1. Créer un composant WebPart annonces et l'ajouter à un site.
  2. Ouvrez le site dans SharePoint Designer.
  3. Ouvrez default.aspx du site.
  4. Sélectionnez le composant WebPart annonces et faites un clic droit.
  5. Dans le menu contextuel, Sélectionnez "convertir à XSLAffichage de données de T ».

SharePoint Designer vous informe que ce site est maintenant personnalisé de sa définition du site. Ce n'est pas forcément mauvais, mais il y a des conséquences importantes sur (performance, mise à niveau, d'autres) qui sont au-delà de la portée de ce petit "rapide et facile" entrée. Pour obtenir plus d'informations sur ce sujet, Je vous recommande les deux livres ici ainsi que votre recherche Internet favori.

Confirmer que vous l'avez fait correctement:

  1. Fermer et rouvrir le navigateur web (pour éviter les re-posting accidentellement l'original « ajouter un nouveau composant WebPart »).
  2. Sélectionnez la flèche de la partie web menu déroulant et choisissez "modifier partage Web Part" dans le menu.
  3. Le panneau d'outil s'ouvre vers la droite.
  4. Le groupe a changé de ses options set habituelles à cette:
image

“Impossible d'obtenir la propriété colonne de liste schéma de la liste SharePoint” — Description/travail-solutions de rechange

Cette semaine, Nous avons enfin reproduit un problème qui avait été signalé par un utilisateur distant: Quand elle a essayé d'exporter le contenu d'une liste vers excel, choses semblent commencer à travailler, mais alors Excel pop-up serait une erreur: « Impossible d'obtenir la propriété colonne de liste schéma dans la liste SharePoint ». Elle courait Bureau 2003, Windows XP et la connexion à MOSS.

J'ai cherché les Internets et vu quelques spéculations mais rien 100% définitif. C'est pourquoi, ce poste.

Le problème: Exporter une vue pour excel qui contient une date (date = le type de données de la colonne).

Ce qui a fonctionné pour nous: Convertir la date à « une seule ligne de texte ». Puis, la reconvertir en une date.

Qui a résolu. C'était agréable de voir que la conversion a travaillé, en fait. Il était assez nerveux que convertir les choses de cette façon échouerait, mais il n'a pas.

Ce bug a jeté une ombre immense sur le type de données date dans l'esprit du client, donc nous allons être chercher une réponse définitive de Microsoft et j'espère que je vais poster et mise à jour ici dans le prochain court laps de temps avec leurs informations de réponse et le correctif officielles.

Autres références:

http://www.kevincornwell.com/blog/index.php/cannot-get-the-list-schema-column-property-from-the-sharepoint-list/

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2383611&SiteID=1

<fin>

S'abonner à mon blog.

Tags Technorati: ,

Simple et rapide: Envoyer un email avec lien hypertexte incorporé de flux de travail SharePoint Designer

Une fois ou deux fois par mois, quelqu'un publie une question forum: « Comment je comportent des liens hypertexte à une URL qui est cliquable dans un courriel de SharePoint Designer?"

Présenté sans autres commentaires: (bien, en fait, il y a d'autres commentaires après l'image):

image

Les Becky Isserman suit avec une explication utile sur la façon d'intégrer un lien vers un élément dans le Courriel: http://www.sharepointblogs.com/mosslover/archive/2007/11/20/addition-to-paul-galvin-s-post-about-sending-an-e-mail-with-hyperlinks-in-spd.aspx

Nouvelle version: Extensions de flux de travail SharePoint Designer (fonctions de manipulation de chaîne)

MISE À JOUR: Voir ici pour mes pensées sur la commercialisation de ce projet: http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!569.entry

J'ai été occupé à travailler sur mon projet Codeplex qui est actuellement axé sur la prestation de chaîne extensions de manipulation de flux de travail créé via SharePoint Designer.

Voir ici pour plus de détails:

Accueil du projet: http://www.codeplex.com/spdwfextensions

Communiqué: https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=spdwfextensions&ReleaseId=8280

Version 1.0 inclut les nouvelles fonctionnalités suivantes:

Fonction Description (Si pas identique.Fonction nette)
Num-entrées() Renvoie les numéros "entrées" dans une chaîne comme un délimiteur spécifié.

Par exemple: Num-entrées en une chaîne « un,b,c" avec délimiteur »," = 3.

Entrée() Renvoie le nième jeton dans une chaîne comme un délimiteur spécifié.
Longueur String.Length
Remplacer() String.Replace()
Contient() String.Contains()
Renvoie le mot « vrai" ou le mot « faux ».
Sous-chaîne(début) String.Substring(début)
Sous-chaîne(début,longueur) String.Substring(début,longueur)
ToUpper() String.ToUpper()
ToLower() String.ToLower()
StartsWith() String.StartsWith()
Renvoie le mot « vrai" ou le mot « faux ».
EndsWith() String.EndsWith()
Renvoie le mot « vrai" ou le mot « faux ».

Une erreur d'exécution BDC a expliqué

J'a provoqué une erreur BDC cette semaine qui se manifeste sur l'interface utilisateur et en le 12 journal de la ruche lors de l'exécution.

Première, Cela apparaît dans l'interface utilisateur:

Impossible de trouver les champs à insérer toutes les valeurs d'identificateur pour exécuter correctement une SpecificFinder MethodInstance avec nom … S'assurer que les paramètres d'entrée comportent des TypeDescriptors associés à chaque identificateur défini pour cette entité.

Voici une capture d'écran:

clip_image001

Je pourrais également provoquer ce message d'apparaître dans la 12 journal de la ruche à sera (à l'aide de mon high-tech-don't-try-this-at-home breveté « erreurs mystérieuses" méthode):

11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C données de SharePoint Portal Server Business 6q4x haute Exception dans BusinessDataWebPart.OnPreRender: System.InvalidOperationException: La valeur de l'identificateur ”, de Type ”, n'est pas valide. Valeur de l'identificateur attendu de Type « System.String ». à Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Objet[] subIdentifierValues, LobSystemInstance lobSystemInstance) à Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entité de l'entité, Objet[] userValues, LobSystemInstance lobSystemInstance) à Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(Vue desiredView) à Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() à Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()

J'ai cherché et trouvé quelques pistes dans la Forum MSDN, mais ils n'étaient pas assez pour me faire comprendre ce que je faisais mal. J'ai regardé un webcast par Ted Pattison que mon société a aperçut de loin sur un serveur et est venu se rendre compte de mon problème.

Dans mon fichier ADF, Je me connecte à une base de données SQL comme indiqué:

            <Propriété Nom="RdbCommandText" Type="System.String">
              <![CDATA[
                SÉLECTIONNEZ SETID, CARRIER_ID, EFFDT, DESCR, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
                      PAYS, ADRESSE1, ADRESSE2, ADDRESS3, ADDRESS4, VILLE, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
                      COMTÉ DE, ÉTAT, POSTAL, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, TÉLÉPHONE, EXTENSION, TÉLÉCOPIEUR, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
                      INTERLINK_DLL, TMS_EXCLUDE_FLG de dbo.PS_CARRIER_ID_VW avec (NOLOCK)
                OÙ
                  (SETID <> « ACTION ») et
                  (plus bas(CARRIER_ID) >= plus faible(@MinId)) et
                  (plus bas(CARRIER_ID) <= plus faible(@ MaxId)) et
                  (plus bas(DESCR) COMME plus bas(@InputDescr))
                ]]>
            </Propriété>

J'ai obtenu que SQL d'une personne DBA et je me donne à comprendre que c'est un spécial ils ont créé juste pour moi. La clé unique il est CARRIER_ID.

Voici le bug, j'ai présenté:

      <Identificateurs>
        <Identificateur de Nom="CARRIER_ID" TypeName="System.String" />
        <Identificateur de Nom="DESCR" TypeName="System.String" /> 
</Identificateurs>

Quelque part le long de la ligne, J'avais réussi à me confondre au sens de <Identificateurs> et ajouté DESCR, même si ce n'est pas réellement un identificateur. J'ai pris DESCR hors de l'ensemble des identifiants et hop! Tout cela a fonctionné.

J'espère que cela sauve quelqu'un quelque chagrin 🙂

Tags Technorati: , , ,

Vous ne peut pas battre portée de SharePoint

Au cours des deux derniers jours, J'ai participé à deux réunions au cours desquelles nous avons présenté les résultats d'un projet SharePoint. Le CIO et son équipe s'est joint à la première réunion. C'est standard et pas particulièrement notable. Le service informatique est évidemment impliqué dans un déploiement de l'entreprise de n'importe quel projet de technologie. La deuxième réunion élargie pour inclure un Valentin. du marketing, plusieurs administrateurs représentant des ressources humaines, Logistique, Fabrication, Projets d'immobilisations, Qualité, Achat, Développement de l'entreprise et d'autres ministères (certains d'entre eux n'ont pas été directement impliqués dans la phase actuelle). C'est un puissant large public.

Dans ma vie antérieure, J'ai essentiellement travaillé sur des projets ERP et CRM. Ils ont tous deux un domaine assez large solution mais pas aussi large que SharePoint. Pour être pleinement réalisés, Les projets SharePoint légitimement et nécessairement atteint dans tous les coins et recoins d'une organisation. Comment de nombreuses autres solutions d'entreprise ont peu atteindre? Pas beaucoup.

SharePoint représente clairement une énorme opportunité pour ceux d'entre nous la chance d'être dans cet espace. Il offre une excellente occasion de technique (qui est en quelque sorte mis sur sa tête ici sous « Technologies vous devez maîtriser »). Mais encore mieux, SharePoint, nous expose à une gamme étendue et large des processus métiers par le biais de ces engagements. Combien de spécialistes CRM fonctionnent avec le côté de la fabrication de la société? Combien de consultants ERP fonctionne avec les ressources humaines sur l'acquisition de talents? SharePoint est supérieure à tous les deux.

Comme n'importe quoi, Il n'est pas parfait, mais c'est un maudit bon endroit pour être.

Pour l'amour de [Remplissez vos plus proches étant personne supérieur], ne changez pas le ' titre’ colonne de site.

Sur le Forums SharePoint, parfois, quelqu'un demande sur la « modification de l'étiquette de titre" ou sur « retirer titre listes ».

Ligne de fond: Ne le font pas!

Malheureusement, l'interface utilisateur autorise un changement à sens unique de l'étiquette de colonne comme le montre:

image

Titre est une colonne associée à l'élément »" type de contenu. De nombreux, de nombreux, beaucoup CT utilise cette colonne et si vous le changer ici, elle ondule sur partout. Il n'y a de bonnes chances que vous n'avez pas l'intention pour que cela se produise. Vous étiez probablement penser à vous-même, "J'ai une liste de recherche personnalisé et ' titre’ tout n'est pas sensé comme nom de colonne, donc je ne vais pas pour qu'elle prenne "Code d'État’ et d'ajouter une colonne de description." Mais si vous suivez à travers sur cette pensée et renommez "titre’ au « Code d'État », titre de chaque liste (y compris les bibliothèques de documents) modifications au Code d'État"" et vous probablement n'a pas l'intention pour que cela se produise.

Le vrai problème est qu'il s'agit d'un changement de sens unique. L'interface utilisateur "sait" ce titre"" est un mot réservé. Si, Si vous essayez et changez le Code d'État"" Retour à « Titre », il ne vous empêchera et maintenant vous avez vous-même peint dans un coin using paint that never dries 🙂

Que se passe-t-il si vous l'avez déjà changé? Je n'ai pas vu la réponse que nous souhaitons, qui est une méthode simple et facile de changer l'étiquette retour à « Title ». Tout de suite, le meilleur Conseil est de le changer pour quelque chose comme « Doc/Item Title ». C'est une étiquette assez générique qui n'est peut-être pas trop choquante pour vos utilisateurs.

J'ai quelques autres idées qui sont sur ma liste de choses à faire des choses pour la recherche:

  • Contacter Microsoft.
  • Faire quelque chose avec le modèle objet, peut-être en conjonction avec une fonction.
  • Comprendre le schéma de base de données et de mettre à jour manuellement SQL. (Vous devez contacter Microsoft avant de le faire bien; Il annulera probablement votre contrat de support).

Si quelqu'un sait comment résoudre ce problème, Veuillez poster un commentaire.

Mise à jour en fin d'après-midi, 11/15: J'ai trouvé ce lien qui décrit une méthode pour créer un type de liste qui ne possède pas de colonne titre: http://www.venkat.org/index.php/2007/09/03/how-to-remove-title-column-from-a-custom-list/

BDC ADF et votre ami, CDATA

J'ai remarqué que certains maladroit et inutile main-codage de RdbCommandText en quelques exemples (y compris la documentation MSDN).

Je voulais souligner pour les nouveaux arrivants à BDC que les commandes peuvent être enveloppés à l'intérieur d'une balise CDATA dans leur naturel »" formulaire. Si, Cette construction maladroite:

<Propriété Nom="RdbCommandText" Type="System.String">
Sélectionnez dbo.MCRS_SETTLEMENT.ID, dbo.MCRS_SETTLEMENT.Settlement from dbo.MCRS_SETTLEMENT
OÙ (ID &gt;= @MinId) ET (ID &lt;= @ MaxId)
</Propriété>

peut être mieux représentées de cette façon:

<Propriété Nom="RdbCommandText" Type="System.String">
<![CDATA[
Sélectionnez dbo.MCRS_SETTLEMENT.ID, dbo.MCRS_SETTLEMENT.Settlement from dbo.MCRS_SETTLEMENT
OÙ (ID >= @MinId) ET (ID <= @ MaxId)
]]>
</Propriété>

</fin>

ABC de la BDC

Intro à la BDC

Exemple fonctionnel: ADF BDC qui se connecte à la base de données SQL avec embedded user id et mot de passe

J'avais besoin de fil de mousse pour une base de données SQL via BDC. À des fins de test/POC, J'ai voulu intégrer SQL compte id d'utilisateur et mot de passe dans le fichier ADF. À partir de ce modèle (http://msdn2.microsoft.com/en-us/library/ms564221.aspx), J'ai créé un ADF qui se connecte à une instance particulière de SQL server et qui ouvre une session avec un id utilisateur spécifique et un mot de passe et dans cet extrait de code:

  <LobSystemInstances>
    <LobSystemInstance Nom="ClaimsInstance">
      <Propriétés>
        <Propriété Nom="AuthenticationMode" Type="System.String">PassThrough</Propriété>
        <Propriété Nom="DatabaseAccessProvider" Type="System.String">SqlServer</Propriété>
        <Propriété Nom="RdbConnection Data Source" Type="System.String">instance de réelles serveractual</Propriété>
        <Propriété Nom="RdbConnection Initial Catalog" Type="System.String">catalogue initial réel</Propriété>
        <Propriété Nom="RdbConnection sécurité intégrée" Type="System.String">SSPI</Propriété>
        <Propriété Nom="Mise en commun des RdbConnection" Type="System.String">faux</Propriété>

        <!-- Ce sont les valeurs clés: -->
        <Propriété Nom="ID utilisateur RdbConnection" Type="System.String">unes ID utilisateur</Propriété>
        <Propriété Nom="Mot de passe RdbConnection" Type="System.String">mot de passe réel</Propriété>
        <Propriété Nom="RdbConnection Trusted_Connection" Type="System.String">faux</Propriété>

      </Propriétés>
    </LobSystemInstance>
  </LobSystemInstances>

Il n'est pas une bonne pratique, mais il est utile pour une configuration simple et rapide pour les tests. C'était étonnamment difficile à comprendre. J'ai jamais trouvé un exemple fonctionnel avec les mots clés de recherche:

  • ADF incorporé le nom d'utilisateur et mot de passe
  • incorporer les id utilisateur et mot de passe de l'adf
  • incorporer les id utilisateur et mot de passe dans l'adf bdc
  • ABC des bdc SharePoint
  • SharePoint incorporer des id utilisateur et mot de passe de l'adf

</fin>

S'abonner à mon blog.